Autogenerated HTML docs for v2.43.0-76-g1a87c
diff --git a/MyFirstContribution.html b/MyFirstContribution.html index 343944b..d8e3204 100644 --- a/MyFirstContribution.html +++ b/MyFirstContribution.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>My First Contribution to the Git Project</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -2097,7 +2097,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-07 12:13:08 JST + 2023-11-06 19:13:08 PST </div> </div> </body>
diff --git a/MyFirstObjectWalk.html b/MyFirstObjectWalk.html index ac258e1..1542cd6 100644 --- a/MyFirstObjectWalk.html +++ b/MyFirstObjectWalk.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>My First Object Walk</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -1737,7 +1737,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-07-18 03:51:48 JST + 2023-07-17 11:51:48 PDT </div> </div> </body>
diff --git a/RelNotes/2.44.0.txt b/RelNotes/2.44.0.txt new file mode 100644 index 0000000..6a2bd93 --- /dev/null +++ b/RelNotes/2.44.0.txt
@@ -0,0 +1,43 @@ +Git v2.44 Release Notes +======================= + +UI, Workflows & Features + + * "git add" and "git stash" learned to support the ":(attr:...)" + magic pathspec. + + * "git rebase --autosquash" is now enabled for non-interactive rebase, + but it is still incompatible with the apply backend. + + +Performance, Internal Implementation, Development Support etc. + + * Process to add some form of low-level unit tests has started. + + * Add support for GitLab CI. + + * "git for-each-ref --no-sort" still sorted the refs alphabetically + which paid non-trivial cost. It has been redefined to show output + in an unspecified order, to allow certain optimizations to take + advantage of. + + +Fixes since v2.43 +----------------- + + * The way CI testing used "prove" could lead to running the test + suite twice needlessly, which has been corrected. + (merge e7e03ef995 js/ci-discard-prove-state later to maint). + + * Update ref-related tests. + + * "git format-patch --encode-email-headers" ignored the option when + preparing the cover letter, which has been corrected. + + * Newer versions of Getopt::Long started giving warnings against our + (ab)use of it in "git send-email". Bump the minimum version + requirement for Perl to 5.8.1 (from September 2002) to allow + simplifying our implementation. + (merge 6ff658cc78 tz/send-email-negatable-options later to maint). + + * Other code cleanup, docfix, build fix, etc.
diff --git a/ReviewingGuidelines.html b/ReviewingGuidelines.html index 3a90dc2..a8a6d0e 100644 --- a/ReviewingGuidelines.html +++ b/ReviewingGuidelines.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Reviewing Patches in the Git Project</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -975,7 +975,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/SubmittingPatches.html b/SubmittingPatches.html index b7f7c8c..e3ee3c4 100644 --- a/SubmittingPatches.html +++ b/SubmittingPatches.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Submitting Patches</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -1518,7 +1518,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:08 JST + 2023-11-20 08:57:08 PST </div> </div> </body>
diff --git a/ToolsForGit.html b/ToolsForGit.html index 6e9b207..192f53e 100644 --- a/ToolsForGit.html +++ b/ToolsForGit.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Tools for developing Git</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -806,7 +806,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/everyday.html b/everyday.html index 58e5f99..9d430f9 100644 --- a/everyday.html +++ b/everyday.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Everyday Git With 20 Commands Or So</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -751,7 +751,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-add.html b/git-add.html index 7e41b4a..1514e39 100644 --- a/git-add.html +++ b/git-add.html
@@ -1425,7 +1425,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-02-23 08:29:29 JST + 2023-02-22 15:29:29 PST </div> </div> </body>
diff --git a/git-am.html b/git-am.html index c38311c..6546f3a 100644 --- a/git-am.html +++ b/git-am.html
@@ -1289,7 +1289,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-30 08:42:00 JST + 2023-10-29 16:42:00 PDT </div> </div> </body>
diff --git a/git-annotate.html b/git-annotate.html index 3ce050a..d38dbe2 100644 --- a/git-annotate.html +++ b/git-annotate.html
@@ -1089,7 +1089,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-29 03:53:56 JST + 2022-10-28 11:53:56 PDT </div> </div> </body>
diff --git a/git-apply.html b/git-apply.html index 06b9dff..cf6d549 100644 --- a/git-apply.html +++ b/git-apply.html
@@ -1248,7 +1248,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-archimport.html b/git-archimport.html index 74ae5b0..4884021 100644 --- a/git-archimport.html +++ b/git-archimport.html
@@ -905,7 +905,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/git-archive.html b/git-archive.html index 7ad8d45..16a1105 100644 --- a/git-archive.html +++ b/git-archive.html
@@ -1159,7 +1159,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-bisect.html b/git-bisect.html index 4c30d2f..f4b649d 100644 --- a/git-bisect.html +++ b/git-bisect.html
@@ -1244,7 +1244,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-31 15:29:48 JST + 2023-10-30 23:29:48 PDT </div> </div> </body>
diff --git a/git-blame.html b/git-blame.html index af1e070..9c0a73b 100644 --- a/git-blame.html +++ b/git-blame.html
@@ -1498,7 +1498,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-branch.html b/git-branch.html index 33c7c65..35b0708 100644 --- a/git-branch.html +++ b/git-branch.html
@@ -1592,7 +1592,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-30 08:42:00 JST + 2023-10-29 16:42:00 PDT </div> </div> </body>
diff --git a/git-bugreport.html b/git-bugreport.html index 32141e7..280115b 100644 --- a/git-bugreport.html +++ b/git-bugreport.html
@@ -880,7 +880,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-bundle.html b/git-bundle.html index 696f2b0..2c870b9 100644 --- a/git-bundle.html +++ b/git-bundle.html
@@ -1104,7 +1104,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-03-20 07:16:41 JST + 2023-03-19 15:16:41 PDT </div> </div> </body>
diff --git a/git-cat-file.html b/git-cat-file.html index e6bf311..21057aa 100644 --- a/git-cat-file.html +++ b/git-cat-file.html
@@ -1342,7 +1342,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-19 05:44:22 JST + 2023-10-18 13:44:22 PDT </div> </div> </body>
diff --git a/git-check-attr.html b/git-check-attr.html index 04b9899..be89417 100644 --- a/git-check-attr.html +++ b/git-check-attr.html
@@ -970,7 +970,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-check-ignore.html b/git-check-ignore.html index 4d72e6d..344c29e 100644 --- a/git-check-ignore.html +++ b/git-check-ignore.html
@@ -924,7 +924,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-check-mailmap.html b/git-check-mailmap.html index a45a0bf..421cbf8 100644 --- a/git-check-mailmap.html +++ b/git-check-mailmap.html
@@ -811,7 +811,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-01-26 11:03:13 JST + 2021-01-25 18:03:13 PST </div> </div> </body>
diff --git a/git-check-ref-format.html b/git-check-ref-format.html index 6c92aff..abcf6ef 100644 --- a/git-check-ref-format.html +++ b/git-check-ref-format.html
@@ -963,7 +963,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-checkout-index.html b/git-checkout-index.html index 313fc64..c4c0fd2 100644 --- a/git-checkout-index.html +++ b/git-checkout-index.html
@@ -1020,7 +1020,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-checkout.html b/git-checkout.html index c9d94da..d9e0cf9 100644 --- a/git-checkout.html +++ b/git-checkout.html
@@ -1633,7 +1633,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-cherry-pick.html b/git-cherry-pick.html index 3b421e8..353bbfb 100644 --- a/git-cherry-pick.html +++ b/git-cherry-pick.html
@@ -1217,7 +1217,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-01-22 10:52:14 JST + 2023-01-21 17:52:14 PST </div> </div> </body>
diff --git a/git-cherry.html b/git-cherry.html index 6f997f8..2f56651 100644 --- a/git-cherry.html +++ b/git-cherry.html
@@ -915,7 +915,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-citool.html b/git-citool.html index 2769f78..c7530ab 100644 --- a/git-citool.html +++ b/git-citool.html
@@ -776,7 +776,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-clean.html b/git-clean.html index 504cfc6..0e947da 100644 --- a/git-clean.html +++ b/git-clean.html
@@ -992,7 +992,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-clone.html b/git-clone.html index 67194bc..39b3f6c 100644 --- a/git-clone.html +++ b/git-clone.html
@@ -1513,7 +1513,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-04-21 07:18:02 JST + 2023-04-20 15:18:02 PDT </div> </div> </body>
diff --git a/git-column.html b/git-column.html index 812bc8d..bf89dcc 100644 --- a/git-column.html +++ b/git-column.html
@@ -1015,7 +1015,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-09-15 05:23:11 JST + 2022-09-14 13:23:11 PDT </div> </div> </body>
diff --git a/git-commit-graph.html b/git-commit-graph.html index a76d53e..c7e3188 100644 --- a/git-commit-graph.html +++ b/git-commit-graph.html
@@ -989,7 +989,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-29 03:53:56 JST + 2022-10-28 11:53:56 PDT </div> </div> </body>
diff --git a/git-commit-tree.html b/git-commit-tree.html index e88f69a..39a88be 100644 --- a/git-commit-tree.html +++ b/git-commit-tree.html
@@ -1029,7 +1029,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-04-25 15:01:58 JST + 2020-04-24 23:01:58 PDT </div> </div> </body>
diff --git a/git-commit.html b/git-commit.html index e60c160..539622f 100644 --- a/git-commit.html +++ b/git-commit.html
@@ -1840,7 +1840,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-05 07:43:56 JST + 2023-10-04 15:43:56 PDT </div> </div> </body>
diff --git a/git-config.html b/git-config.html index 217b780..f79d468 100644 --- a/git-config.html +++ b/git-config.html
@@ -9656,7 +9656,9 @@ </dt> <dd> <p> - If set to true enable <code>--autosquash</code> option by default. + If set to true, enable the <code>--autosquash</code> option of + <a href="git-rebase.html">git-rebase(1)</a> by default for interactive mode. + This can be overridden with the <code>--no-autosquash</code> option. </p> </dd> <dt class="hdlist1"> @@ -11845,7 +11847,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-09-23 09:04:28 JST + 2023-09-22 17:04:28 PDT </div> </div> </body>
diff --git a/git-count-objects.html b/git-count-objects.html index 5cd6455..d54a5c8 100644 --- a/git-count-objects.html +++ b/git-count-objects.html
@@ -815,7 +815,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-credential-cache--daemon.html b/git-credential-cache--daemon.html index 35672fc..0b7a874 100644 --- a/git-credential-cache--daemon.html +++ b/git-credential-cache--daemon.html
@@ -786,7 +786,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-29 03:53:56 JST + 2022-10-28 11:53:56 PDT </div> </div> </body>
diff --git a/git-credential-cache.html b/git-credential-cache.html index 0ef9e6c..bfe10c9 100644 --- a/git-credential-cache.html +++ b/git-credential-cache.html
@@ -845,7 +845,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-credential-store.html b/git-credential-store.html index 8b01eac..c64a1ae 100644 --- a/git-credential-store.html +++ b/git-credential-store.html
@@ -882,7 +882,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-credential.html b/git-credential.html index 614f6b0..ce596fc 100644 --- a/git-credential.html +++ b/git-credential.html
@@ -986,7 +986,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-cvsexportcommit.html b/git-cvsexportcommit.html index 5f22365..71f7428 100644 --- a/git-cvsexportcommit.html +++ b/git-cvsexportcommit.html
@@ -951,7 +951,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/git-cvsimport.html b/git-cvsimport.html index 83ecbbe..af3a9ca 100644 --- a/git-cvsimport.html +++ b/git-cvsimport.html
@@ -1107,7 +1107,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/git-cvsserver.html b/git-cvsserver.html index a675dc4..a9f96a9 100644 --- a/git-cvsserver.html +++ b/git-cvsserver.html
@@ -1327,7 +1327,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-06-24 05:24:09 JST + 2023-06-23 13:24:09 PDT </div> </div> </body>
diff --git a/git-daemon.html b/git-daemon.html index f30e5b9..5e2fa7a 100644 --- a/git-daemon.html +++ b/git-daemon.html
@@ -1281,7 +1281,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-describe.html b/git-describe.html index 144f232..43efd6c 100644 --- a/git-describe.html +++ b/git-describe.html
@@ -1042,7 +1042,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-06-24 05:24:09 JST + 2023-06-23 13:24:09 PDT </div> </div> </body>
diff --git a/git-diagnose.html b/git-diagnose.html index 505b40e..4fc8388 100644 --- a/git-diagnose.html +++ b/git-diagnose.html
@@ -858,7 +858,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-08-26 07:15:05 JST + 2022-08-25 15:15:05 PDT </div> </div> </body>
diff --git a/git-diff-files.html b/git-diff-files.html index 9077941..2c512cf 100644 --- a/git-diff-files.html +++ b/git-diff-files.html
@@ -2716,7 +2716,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-diff-index.html b/git-diff-index.html index 68865ed..238db47 100644 --- a/git-diff-index.html +++ b/git-diff-index.html
@@ -2810,7 +2810,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-diff-tree.html b/git-diff-tree.html index 1fed50f..54ca361 100644 --- a/git-diff-tree.html +++ b/git-diff-tree.html
@@ -4044,7 +4044,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-diff.html b/git-diff.html index e81d8a1..34f703e 100644 --- a/git-diff.html +++ b/git-diff.html
@@ -3679,7 +3679,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-06-24 05:24:09 JST + 2023-06-23 13:24:09 PDT </div> </div> </body>
diff --git a/git-difftool.html b/git-difftool.html index d55bfc4..62858e6 100644 --- a/git-difftool.html +++ b/git-difftool.html
@@ -1055,7 +1055,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-fast-export.html b/git-fast-export.html index 5de4830..fa7da21 100644 --- a/git-fast-export.html +++ b/git-fast-export.html
@@ -1120,7 +1120,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-29 03:53:56 JST + 2022-10-28 11:53:56 PDT </div> </div> </body>
diff --git a/git-fast-import.html b/git-fast-import.html index ee86b99..a7047a3 100644 --- a/git-fast-import.html +++ b/git-fast-import.html
@@ -2640,7 +2640,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-fetch-pack.html b/git-fetch-pack.html index ae0cb50..95a4f98 100644 --- a/git-fetch-pack.html +++ b/git-fetch-pack.html
@@ -983,7 +983,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-fetch.html b/git-fetch.html index 18406e8..1fdd611 100644 --- a/git-fetch.html +++ b/git-fetch.html
@@ -2237,7 +2237,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-05-16 08:02:03 JST + 2023-05-15 16:02:03 PDT </div> </div> </body>
diff --git a/git-filter-branch.html b/git-filter-branch.html index bb44565..73d68b5 100644 --- a/git-filter-branch.html +++ b/git-filter-branch.html
@@ -1626,7 +1626,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-11-02 15:43:13 JST + 2020-11-01 22:43:13 PST </div> </div> </body>
diff --git a/git-fmt-merge-msg.html b/git-fmt-merge-msg.html index 448dc1f..6966f1e 100644 --- a/git-fmt-merge-msg.html +++ b/git-fmt-merge-msg.html
@@ -917,7 +917,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-01-06 07:13:29 JST + 2022-01-05 14:13:29 PST </div> </div> </body>
diff --git a/git-for-each-ref.html b/git-for-each-ref.html index 6798e11..a9d5256 100644 --- a/git-for-each-ref.html +++ b/git-for-each-ref.html
@@ -822,18 +822,14 @@ </dt> <dd> <p> - A string that interpolates <code>%(fieldname)</code> from a ref being shown - and the object it points at. If <code>fieldname</code> - is prefixed with an asterisk (<code>*</code>) and the ref points - at a tag object, use the value for the field in the object - which the tag object refers to (instead of the field in the tag object). - When unspecified, <code><format></code> defaults to - <code>%(objectname) SPC %(objecttype) TAB %(refname)</code>. - It also interpolates <code>%%</code> to <code>%</code>, and <code>%xx</code> where <code>xx</code> - are hex digits interpolates to character with hex code - <code>xx</code>; for example <code>%00</code> interpolates to <code>\0</code> (NUL), - <code>%09</code> to <code>\t</code> (TAB) and <code>%0a</code> to <code>\n</code> (LF). + A string that interpolates <code>%(fieldname)</code> from a ref being shown and + the object it points at. In addition, the string literal <code>%%</code> + renders as <code>%</code> and <code>%xx</code> - where <code>xx</code> are hex digits - renders as + the character with hex code <code>xx</code>. For example, <code>%00</code> interpolates to + <code>\0</code> (NUL), <code>%09</code> to <code>\t</code> (TAB), and <code>%0a</code> to <code>\n</code> (LF). </p> +<div class="paragraph"><p>When unspecified, <code><format></code> defaults to <code>%(objectname) SPC %(objecttype) +TAB %(refname)</code>.</p></div> </dd> <dt class="hdlist1"> --color[=<when>] @@ -1262,6 +1258,9 @@ fields will correspond to the appropriate date or name-email-date tuple from the <code>committer</code> or <code>tagger</code> fields depending on the object type. These are intended for working on a mix of annotated and lightweight tags.</p></div> +<div class="paragraph"><p>For tag objects, a <code>fieldname</code> prefixed with an asterisk (<code>*</code>) expands to +the <code>fieldname</code> value of the peeled object, rather than that of the tag +object itself.</p></div> <div class="paragraph"><p>Fields that have name-email-date tuple as its value (<code>author</code>, <code>committer</code>, and <code>tagger</code>) can be suffixed with <code>name</code>, <code>email</code>, and <code>date</code> to extract the named component. For email fields (<code>authoremail</code>, @@ -1498,7 +1497,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-05 07:43:56 JST + 2023-12-09 17:40:53 PST </div> </div> </body>
diff --git a/git-for-each-ref.txt b/git-for-each-ref.txt index e86d570..be9543f 100644 --- a/git-for-each-ref.txt +++ b/git-for-each-ref.txt
@@ -51,17 +51,14 @@ key. --format=<format>:: - A string that interpolates `%(fieldname)` from a ref being shown - and the object it points at. If `fieldname` - is prefixed with an asterisk (`*`) and the ref points - at a tag object, use the value for the field in the object - which the tag object refers to (instead of the field in the tag object). - When unspecified, `<format>` defaults to - `%(objectname) SPC %(objecttype) TAB %(refname)`. - It also interpolates `%%` to `%`, and `%xx` where `xx` - are hex digits interpolates to character with hex code - `xx`; for example `%00` interpolates to `\0` (NUL), - `%09` to `\t` (TAB) and `%0a` to `\n` (LF). + A string that interpolates `%(fieldname)` from a ref being shown and + the object it points at. In addition, the string literal `%%` + renders as `%` and `%xx` - where `xx` are hex digits - renders as + the character with hex code `xx`. For example, `%00` interpolates to + `\0` (NUL), `%09` to `\t` (TAB), and `%0a` to `\n` (LF). ++ +When unspecified, `<format>` defaults to `%(objectname) SPC %(objecttype) +TAB %(refname)`. --color[=<when>]:: Respect any colors specified in the `--format` option. The @@ -298,6 +295,10 @@ from the `committer` or `tagger` fields depending on the object type. These are intended for working on a mix of annotated and lightweight tags. +For tag objects, a `fieldname` prefixed with an asterisk (`*`) expands to +the `fieldname` value of the peeled object, rather than that of the tag +object itself. + Fields that have name-email-date tuple as its value (`author`, `committer`, and `tagger`) can be suffixed with `name`, `email`, and `date` to extract the named component. For email fields (`authoremail`,
diff --git a/git-for-each-repo.html b/git-for-each-repo.html index 4ee7059..1b26989 100644 --- a/git-for-each-repo.html +++ b/git-for-each-repo.html
@@ -812,7 +812,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-11-21 15:32:32 JST + 2020-11-20 22:32:32 PST </div> </div> </body>
diff --git a/git-format-patch.html b/git-format-patch.html index 01b1942..d2e154a 100644 --- a/git-format-patch.html +++ b/git-format-patch.html
@@ -2618,7 +2618,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-fsck-objects.html b/git-fsck-objects.html index 61b56b3..6618176 100644 --- a/git-fsck-objects.html +++ b/git-fsck-objects.html
@@ -772,7 +772,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-fsck.html b/git-fsck.html index a7999a7..148c3b9 100644 --- a/git-fsck.html +++ b/git-fsck.html
@@ -1591,7 +1591,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-fsmonitor--daemon.html b/git-fsmonitor--daemon.html index 7976b26..d04cb8e 100644 --- a/git-fsmonitor--daemon.html +++ b/git-fsmonitor--daemon.html
@@ -900,7 +900,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-gc.html b/git-gc.html index c22b144..cc259c1 100644 --- a/git-gc.html +++ b/git-gc.html
@@ -1257,7 +1257,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-19 05:44:22 JST + 2023-10-18 13:44:22 PDT </div> </div> </body>
diff --git a/git-get-tar-commit-id.html b/git-get-tar-commit-id.html index c79954b..fe99480 100644 --- a/git-get-tar-commit-id.html +++ b/git-get-tar-commit-id.html
@@ -778,7 +778,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-grep.html b/git-grep.html index ee052fc..7ab380c 100644 --- a/git-grep.html +++ b/git-grep.html
@@ -1489,7 +1489,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-gui.html b/git-gui.html index fbaad63..d297f88 100644 --- a/git-gui.html +++ b/git-gui.html
@@ -945,7 +945,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/git-hash-object.html b/git-hash-object.html index c5edeb1..b558045 100644 --- a/git-hash-object.html +++ b/git-hash-object.html
@@ -855,7 +855,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-help.html b/git-help.html index d2102ac..1fd38ca 100644 --- a/git-help.html +++ b/git-help.html
@@ -1056,7 +1056,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-hook.html b/git-hook.html index dae5525..5068e5a 100644 --- a/git-hook.html +++ b/git-hook.html
@@ -824,7 +824,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-http-backend.html b/git-http-backend.html index f020c8d..a0fb2b8 100644 --- a/git-http-backend.html +++ b/git-http-backend.html
@@ -1102,7 +1102,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-http-fetch.html b/git-http-fetch.html index 2733180..0ab1d00 100644 --- a/git-http-fetch.html +++ b/git-http-fetch.html
@@ -860,7 +860,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-http-push.html b/git-http-push.html index 2e1f9f7..cf2c855 100644 --- a/git-http-push.html +++ b/git-http-push.html
@@ -908,7 +908,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-imap-send.html b/git-imap-send.html index 6611ce2..959a11e 100644 --- a/git-imap-send.html +++ b/git-imap-send.html
@@ -1028,7 +1028,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-09-15 05:23:11 JST + 2022-09-14 13:23:11 PDT </div> </div> </body>
diff --git a/git-index-pack.html b/git-index-pack.html index 2488ac7..5555f40 100644 --- a/git-index-pack.html +++ b/git-index-pack.html
@@ -985,7 +985,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-init-db.html b/git-init-db.html index a9ff2fc..407cb07 100644 --- a/git-init-db.html +++ b/git-init-db.html
@@ -772,7 +772,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/git-init.html b/git-init.html index e98713a..976b080 100644 --- a/git-init.html +++ b/git-init.html
@@ -1038,7 +1038,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-instaweb.html b/git-instaweb.html index f0e8893..23f6e05 100644 --- a/git-instaweb.html +++ b/git-instaweb.html
@@ -907,7 +907,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-interpret-trailers.html b/git-interpret-trailers.html index 4b3fce6..32ee9a6 100644 --- a/git-interpret-trailers.html +++ b/git-interpret-trailers.html
@@ -1393,7 +1393,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-14 07:25:25 JST + 2023-10-13 15:25:25 PDT </div> </div> </body>
diff --git a/git-log.html b/git-log.html index 7c43879..bdf1a1a 100644 --- a/git-log.html +++ b/git-log.html
@@ -5666,7 +5666,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-ls-files.html b/git-ls-files.html index 9eeb499..8c908bc 100644 --- a/git-ls-files.html +++ b/git-ls-files.html
@@ -1382,7 +1382,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-ls-remote.html b/git-ls-remote.html index 3391bd9..90781dd 100644 --- a/git-ls-remote.html +++ b/git-ls-remote.html
@@ -987,7 +987,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-06-14 05:57:42 JST + 2023-06-13 13:57:42 PDT </div> </div> </body>
diff --git a/git-ls-tree.html b/git-ls-tree.html index 5d83186..e20b965 100644 --- a/git-ls-tree.html +++ b/git-ls-tree.html
@@ -1028,7 +1028,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-06-24 05:24:09 JST + 2023-06-23 13:24:09 PDT </div> </div> </body>
diff --git a/git-mailinfo.html b/git-mailinfo.html index 78995ec..749f046 100644 --- a/git-mailinfo.html +++ b/git-mailinfo.html
@@ -972,7 +972,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-09-15 05:23:11 JST + 2022-09-14 13:23:11 PDT </div> </div> </body>
diff --git a/git-mailsplit.html b/git-mailsplit.html index 939aaef..5f1c2db 100644 --- a/git-mailsplit.html +++ b/git-mailsplit.html
@@ -860,7 +860,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-maintenance.html b/git-maintenance.html index dfe43f1..5f08167 100644 --- a/git-maintenance.html +++ b/git-maintenance.html
@@ -1359,7 +1359,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-merge-base.html b/git-merge-base.html index e2a1dc3..e86337e 100644 --- a/git-merge-base.html +++ b/git-merge-base.html
@@ -1017,7 +1017,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-merge-file.html b/git-merge-file.html index eb821bc..ab5fed5 100644 --- a/git-merge-file.html +++ b/git-merge-file.html
@@ -919,7 +919,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-09 02:04:31 JST + 2023-11-08 09:04:31 PST </div> </div> </body>
diff --git a/git-merge-index.html b/git-merge-index.html index d4128b4..2cedbc8 100644 --- a/git-merge-index.html +++ b/git-merge-index.html
@@ -852,7 +852,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/git-merge-one-file.html b/git-merge-one-file.html index 907a401..1c961f4 100644 --- a/git-merge-one-file.html +++ b/git-merge-one-file.html
@@ -772,7 +772,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-merge-tree.html b/git-merge-tree.html index b46a763..a429f6a 100644 --- a/git-merge-tree.html +++ b/git-merge-tree.html
@@ -1152,7 +1152,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-merge.html b/git-merge.html index f4d79c0..d5dda7f 100644 --- a/git-merge.html +++ b/git-merge.html
@@ -2336,7 +2336,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-mergetool--lib.html b/git-mergetool--lib.html index 7f04aab..6f4780f 100644 --- a/git-mergetool--lib.html +++ b/git-mergetool--lib.html
@@ -832,7 +832,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-mergetool.html b/git-mergetool.html index b1cffd2..8c8886e 100644 --- a/git-mergetool.html +++ b/git-mergetool.html
@@ -1342,7 +1342,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-mktag.html b/git-mktag.html index 2767aa6..037c05c 100644 --- a/git-mktag.html +++ b/git-mktag.html
@@ -828,7 +828,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-mktree.html b/git-mktree.html index 2aa6e04..1bb98f7 100644 --- a/git-mktree.html +++ b/git-mktree.html
@@ -811,7 +811,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-multi-pack-index.html b/git-multi-pack-index.html index 8e0a906..db7631b 100644 --- a/git-multi-pack-index.html +++ b/git-multi-pack-index.html
@@ -958,7 +958,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-11 06:40:17 JST + 2022-10-10 14:40:17 PDT </div> </div> </body>
diff --git a/git-mv.html b/git-mv.html index ced14c8..e928ca7 100644 --- a/git-mv.html +++ b/git-mv.html
@@ -857,7 +857,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-name-rev.html b/git-name-rev.html index 9f83873..74e35af 100644 --- a/git-name-rev.html +++ b/git-name-rev.html
@@ -903,7 +903,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-notes.html b/git-notes.html index 689a7b6..849ec4c 100644 --- a/git-notes.html +++ b/git-notes.html
@@ -1396,7 +1396,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-08-18 09:18:11 JST + 2023-08-17 17:18:11 PDT </div> </div> </body>
diff --git a/git-p4.html b/git-p4.html index ee0d4df..ed16cfb 100644 --- a/git-p4.html +++ b/git-p4.html
@@ -1974,7 +1974,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-05-21 09:49:41 JST + 2022-05-20 17:49:41 PDT </div> </div> </body>
diff --git a/git-pack-objects.html b/git-pack-objects.html index 5b73781..f5cc212 100644 --- a/git-pack-objects.html +++ b/git-pack-objects.html
@@ -1388,7 +1388,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-11 03:55:22 JST + 2023-10-10 11:55:22 PDT </div> </div> </body>
diff --git a/git-pack-redundant.html b/git-pack-redundant.html index e0002ac..92bfb27 100644 --- a/git-pack-redundant.html +++ b/git-pack-redundant.html
@@ -834,7 +834,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-04-07 05:56:57 JST + 2023-04-06 13:56:57 PDT </div> </div> </body>
diff --git a/git-pack-refs.html b/git-pack-refs.html index d403b92..851b6de 100644 --- a/git-pack-refs.html +++ b/git-pack-refs.html
@@ -860,7 +860,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-06-14 05:57:42 JST + 2023-06-13 13:57:42 PDT </div> </div> </body>
diff --git a/git-patch-id.html b/git-patch-id.html index 47b0089..2ce031a 100644 --- a/git-patch-id.html +++ b/git-patch-id.html
@@ -855,7 +855,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-11-05 13:49:36 JST + 2022-11-04 21:49:36 PDT </div> </div> </body>
diff --git a/git-prune-packed.html b/git-prune-packed.html index eca33d4..3726c82 100644 --- a/git-prune-packed.html +++ b/git-prune-packed.html
@@ -814,7 +814,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-prune.html b/git-prune.html index 81142d2..cdc99c6 100644 --- a/git-prune.html +++ b/git-prune.html
@@ -884,7 +884,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-pull.html b/git-pull.html index 5e8b36c..c32ec00 100644 --- a/git-pull.html +++ b/git-pull.html
@@ -2314,7 +2314,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-10-19 09:00:13 JST + 2021-10-18 17:00:13 PDT </div> </div> </body>
diff --git a/git-push.html b/git-push.html index fa0be5f..1aeffea 100644 --- a/git-push.html +++ b/git-push.html
@@ -2181,7 +2181,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-30 08:42:00 JST + 2023-10-29 16:42:00 PDT </div> </div> </body>
diff --git a/git-quiltimport.html b/git-quiltimport.html index 0b629e6..ea022dc 100644 --- a/git-quiltimport.html +++ b/git-quiltimport.html
@@ -841,7 +841,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-range-diff.html b/git-range-diff.html index 2a75d03..47321c9 100644 --- a/git-range-diff.html +++ b/git-range-diff.html
@@ -1085,7 +1085,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-30 08:42:00 JST + 2023-10-29 16:42:00 PDT </div> </div> </body>
diff --git a/git-read-tree.html b/git-read-tree.html index 1bbe705..1968d7e 100644 --- a/git-read-tree.html +++ b/git-read-tree.html
@@ -1294,7 +1294,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-rebase.html b/git-rebase.html index a3a44f0..dc91f9f 100644 --- a/git-rebase.html +++ b/git-rebase.html
@@ -1545,21 +1545,25 @@ </dt> <dd> <p> - When the commit log message begins with "squash! …" or "fixup! …" - or "amend! …", and there is already a commit in the todo list that - matches the same <code>...</code>, automatically modify the todo list of - <code>rebase -i</code>, so that the commit marked for squashing comes right after - the commit to be modified, and change the action of the moved commit - from <code>pick</code> to <code>squash</code> or <code>fixup</code> or <code>fixup -C</code> respectively. A commit - matches the <code>...</code> if the commit subject matches, or if the <code>...</code> refers - to the commit’s hash. As a fall-back, partial matches of the commit - subject work, too. The recommended way to create fixup/amend/squash - commits is by using the <code>--fixup</code>, <code>--fixup=amend:</code> or <code>--fixup=reword:</code> - and <code>--squash</code> options respectively of <a href="git-commit.html">git-commit(1)</a>. + Automatically squash commits with specially formatted messages into + previous commits being rebased. If a commit message starts with + "squash! ", "fixup! " or "amend! ", the remainder of the subject line + is taken as a commit specifier, which matches a previous commit if it + matches the subject line or the hash of that commit. If no commit + matches fully, matches of the specifier with the start of commit + subjects are considered. </p> -<div class="paragraph"><p>If the <code>--autosquash</code> option is enabled by default using the -configuration variable <code>rebase.autoSquash</code>, this option can be -used to override and disable this setting.</p></div> +<div class="paragraph"><p>In the rebase todo list, the actions of squash, fixup and amend commits are +changed from <code>pick</code> to <code>squash</code>, <code>fixup</code> or <code>fixup -C</code>, respectively, and they +are moved right after the commit they modify. The <code>--interactive</code> option can +be used to review and edit the todo list before proceeding.</p></div> +<div class="paragraph"><p>The recommended way to create commits with squash markers is by using the +<code>--squash</code>, <code>--fixup</code>, <code>--fixup=amend:</code> or <code>--fixup=reword:</code> options of +<a href="git-commit.html">git-commit(1)</a>, which take the target commit as an argument and +automatically fill in the subject line of the new commit from that.</p></div> +<div class="paragraph"><p>Settting configuration variable <code>rebase.autoSquash</code> to true enables +auto-squashing by default for interactive rebase. The <code>--no-autosquash</code> +option can be used to override that setting.</p></div> <div class="paragraph"><p>See also INCOMPATIBLE OPTIONS below.</p></div> </dd> <dt class="hdlist1"> @@ -2659,7 +2663,9 @@ </dt> <dd> <p> - If set to true enable <code>--autosquash</code> option by default. + If set to true, enable the <code>--autosquash</code> option of + <a href="git-rebase.html">git-rebase(1)</a> by default for interactive mode. + This can be overridden with the <code>--no-autosquash</code> option. </p> </dd> <dt class="hdlist1"> @@ -2803,7 +2809,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-07 12:13:08 JST + 2023-12-09 17:40:53 PST </div> </div> </body>
diff --git a/git-rebase.txt b/git-rebase.txt index b4526ca..1dd6555 100644 --- a/git-rebase.txt +++ b/git-rebase.txt
@@ -589,21 +589,27 @@ --autosquash:: --no-autosquash:: - When the commit log message begins with "squash! ..." or "fixup! ..." - or "amend! ...", and there is already a commit in the todo list that - matches the same `...`, automatically modify the todo list of - `rebase -i`, so that the commit marked for squashing comes right after - the commit to be modified, and change the action of the moved commit - from `pick` to `squash` or `fixup` or `fixup -C` respectively. A commit - matches the `...` if the commit subject matches, or if the `...` refers - to the commit's hash. As a fall-back, partial matches of the commit - subject work, too. The recommended way to create fixup/amend/squash - commits is by using the `--fixup`, `--fixup=amend:` or `--fixup=reword:` - and `--squash` options respectively of linkgit:git-commit[1]. + Automatically squash commits with specially formatted messages into + previous commits being rebased. If a commit message starts with + "squash! ", "fixup! " or "amend! ", the remainder of the subject line + is taken as a commit specifier, which matches a previous commit if it + matches the subject line or the hash of that commit. If no commit + matches fully, matches of the specifier with the start of commit + subjects are considered. + -If the `--autosquash` option is enabled by default using the -configuration variable `rebase.autoSquash`, this option can be -used to override and disable this setting. +In the rebase todo list, the actions of squash, fixup and amend commits are +changed from `pick` to `squash`, `fixup` or `fixup -C`, respectively, and they +are moved right after the commit they modify. The `--interactive` option can +be used to review and edit the todo list before proceeding. ++ +The recommended way to create commits with squash markers is by using the +`--squash`, `--fixup`, `--fixup=amend:` or `--fixup=reword:` options of +linkgit:git-commit[1], which take the target commit as an argument and +automatically fill in the subject line of the new commit from that. ++ +Settting configuration variable `rebase.autoSquash` to true enables +auto-squashing by default for interactive rebase. The `--no-autosquash` +option can be used to override that setting. + See also INCOMPATIBLE OPTIONS below.
diff --git a/git-receive-pack.html b/git-receive-pack.html index 6962011..25bc415 100644 --- a/git-receive-pack.html +++ b/git-receive-pack.html
@@ -1094,7 +1094,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-reflog.html b/git-reflog.html index 82cafdf..a6265b2 100644 --- a/git-reflog.html +++ b/git-reflog.html
@@ -925,7 +925,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-29 03:53:56 JST + 2022-10-28 11:53:56 PDT </div> </div> </body>
diff --git a/git-remote-ext.html b/git-remote-ext.html index ad6862a..7c6850d 100644 --- a/git-remote-ext.html +++ b/git-remote-ext.html
@@ -963,7 +963,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-remote-fd.html b/git-remote-fd.html index e95aa67..3bfe8ec 100644 --- a/git-remote-fd.html +++ b/git-remote-fd.html
@@ -843,7 +843,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-remote-helpers.html b/git-remote-helpers.html index bb94308..4ee3017 100644 --- a/git-remote-helpers.html +++ b/git-remote-helpers.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>git-remote-helpers</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -751,7 +751,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-remote.html b/git-remote.html index dc22f9c..9f04749 100644 --- a/git-remote.html +++ b/git-remote.html
@@ -1057,7 +1057,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-05-27 08:11:01 JST + 2022-05-26 16:11:01 PDT </div> </div> </body>
diff --git a/git-repack.html b/git-repack.html index 6f3f08b..ff848c3 100644 --- a/git-repack.html +++ b/git-repack.html
@@ -1169,7 +1169,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-30 08:42:00 JST + 2023-10-29 16:42:00 PDT </div> </div> </body>
diff --git a/git-replace.html b/git-replace.html index e4a5389..a61a626 100644 --- a/git-replace.html +++ b/git-replace.html
@@ -971,7 +971,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-request-pull.html b/git-request-pull.html index 7b116a7..058ee0c 100644 --- a/git-request-pull.html +++ b/git-request-pull.html
@@ -855,7 +855,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-rerere.html b/git-rerere.html index bd49b47..3355158 100644 --- a/git-rerere.html +++ b/git-rerere.html
@@ -990,7 +990,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-29 03:53:56 JST + 2022-10-28 11:53:56 PDT </div> </div> </body>
diff --git a/git-reset.html b/git-reset.html index fb99c42..0dfcc35 100644 --- a/git-reset.html +++ b/git-reset.html
@@ -1507,7 +1507,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-01-22 10:52:14 JST + 2023-01-21 17:52:14 PST </div> </div> </body>
diff --git a/git-restore.html b/git-restore.html index b9ef32f..04efbff 100644 --- a/git-restore.html +++ b/git-restore.html
@@ -1077,7 +1077,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-rev-list.html b/git-rev-list.html index 51789a4..6d5a953 100644 --- a/git-rev-list.html +++ b/git-rev-list.html
@@ -3770,7 +3770,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-rev-parse.html b/git-rev-parse.html index 6aca716..01238dc 100644 --- a/git-rev-parse.html +++ b/git-rev-parse.html
@@ -2151,7 +2151,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-revert.html b/git-revert.html index 842cfa2..ad8b3d8 100644 --- a/git-revert.html +++ b/git-revert.html
@@ -1070,7 +1070,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-09-15 03:18:26 JST + 2023-09-14 11:18:26 PDT </div> </div> </body>
diff --git a/git-rm.html b/git-rm.html index 6b07f86..ac15f87 100644 --- a/git-rm.html +++ b/git-rm.html
@@ -1033,7 +1033,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-send-email.html b/git-send-email.html index 05ab8cc..c32eabb 100644 --- a/git-send-email.html +++ b/git-send-email.html
@@ -1834,7 +1834,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-30 08:42:00 JST + 2023-10-29 16:42:00 PDT </div> </div> </body>
diff --git a/git-send-pack.html b/git-send-pack.html index e220938..7fe9e63 100644 --- a/git-send-pack.html +++ b/git-send-pack.html
@@ -994,7 +994,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-sh-i18n--envsubst.html b/git-sh-i18n--envsubst.html index a5b9dc0..1aefa50 100644 --- a/git-sh-i18n--envsubst.html +++ b/git-sh-i18n--envsubst.html
@@ -785,7 +785,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-sh-i18n.html b/git-sh-i18n.html index 80a63de..b66da6e 100644 --- a/git-sh-i18n.html +++ b/git-sh-i18n.html
@@ -807,7 +807,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-sh-setup.html b/git-sh-setup.html index 4d5cb1d..5ebb9ea 100644 --- a/git-sh-setup.html +++ b/git-sh-setup.html
@@ -902,7 +902,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-shell.html b/git-shell.html index 675ea2d..8f46133 100644 --- a/git-shell.html +++ b/git-shell.html
@@ -873,7 +873,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-shortlog.html b/git-shortlog.html index 1ac89a3..d3d2b14 100644 --- a/git-shortlog.html +++ b/git-shortlog.html
@@ -2037,7 +2037,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-11-05 13:49:36 JST + 2022-11-04 21:49:36 PDT </div> </div> </body>
diff --git a/git-show-branch.html b/git-show-branch.html index a9fdaae..d25943d 100644 --- a/git-show-branch.html +++ b/git-show-branch.html
@@ -1065,7 +1065,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-show-index.html b/git-show-index.html index 6e2f2fc..4e2a48c 100644 --- a/git-show-index.html +++ b/git-show-index.html
@@ -826,7 +826,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-08-26 02:44:55 JST + 2020-08-25 10:44:55 PDT </div> </div> </body>
diff --git a/git-show-ref.html b/git-show-ref.html index d66f9c5..2fac233 100644 --- a/git-show-ref.html +++ b/git-show-ref.html
@@ -1004,7 +1004,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-09 02:04:31 JST + 2023-11-08 09:04:31 PST </div> </div> </body>
diff --git a/git-show.html b/git-show.html index 80b3fd1..3c83e4a 100644 --- a/git-show.html +++ b/git-show.html
@@ -3829,7 +3829,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-sparse-checkout.html b/git-sparse-checkout.html index d8e1c57..56f600c 100644 --- a/git-sparse-checkout.html +++ b/git-sparse-checkout.html
@@ -1312,7 +1312,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-06-24 05:24:09 JST + 2023-06-23 13:24:09 PDT </div> </div> </body>
diff --git a/git-stage.html b/git-stage.html index e401cd6..204ae39 100644 --- a/git-stage.html +++ b/git-stage.html
@@ -772,7 +772,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/git-stash.html b/git-stash.html index bd4c538..226e7ac 100644 --- a/git-stash.html +++ b/git-stash.html
@@ -1327,7 +1327,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-06-24 05:24:09 JST + 2023-06-23 13:24:09 PDT </div> </div> </body>
diff --git a/git-status.html b/git-status.html index eec1c14..829aa59 100644 --- a/git-status.html +++ b/git-status.html
@@ -1464,7 +1464,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-stripspace.html b/git-stripspace.html index 1d2eedc..5a54c83 100644 --- a/git-stripspace.html +++ b/git-stripspace.html
@@ -876,7 +876,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-submodule.html b/git-submodule.html index 460a204..5ca592e 100644 --- a/git-submodule.html +++ b/git-submodule.html
@@ -1416,7 +1416,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-08-05 04:03:14 JST + 2023-08-04 12:03:14 PDT </div> </div> </body>
diff --git a/git-svn.html b/git-svn.html index b52b294..26baae2 100644 --- a/git-svn.html +++ b/git-svn.html
@@ -2514,7 +2514,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/git-switch.html b/git-switch.html index 94213c6..1f9277f 100644 --- a/git-switch.html +++ b/git-switch.html
@@ -1199,7 +1199,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-09-15 05:23:11 JST + 2022-09-14 13:23:11 PDT </div> </div> </body>
diff --git a/git-symbolic-ref.html b/git-symbolic-ref.html index a0aae08..0e25587 100644 --- a/git-symbolic-ref.html +++ b/git-symbolic-ref.html
@@ -863,7 +863,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-tag.html b/git-tag.html index 7e260c5..59571e6 100644 --- a/git-tag.html +++ b/git-tag.html
@@ -1367,7 +1367,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-06-14 05:57:42 JST + 2023-06-13 13:57:42 PDT </div> </div> </body>
diff --git a/git-unpack-file.html b/git-unpack-file.html index 601312a..4e058a9 100644 --- a/git-unpack-file.html +++ b/git-unpack-file.html
@@ -788,7 +788,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-unpack-objects.html b/git-unpack-objects.html index c96452f..da0e9a9 100644 --- a/git-unpack-objects.html +++ b/git-unpack-objects.html
@@ -830,7 +830,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git-update-index.html b/git-update-index.html index 7f04846..07d2ca9 100644 --- a/git-update-index.html +++ b/git-update-index.html
@@ -1557,7 +1557,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-update-ref.html b/git-update-ref.html index 861fbc6..6a2c094 100644 --- a/git-update-ref.html +++ b/git-update-ref.html
@@ -974,7 +974,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-update-server-info.html b/git-update-server-info.html index d1ba953..b3675cc 100644 --- a/git-update-server-info.html +++ b/git-update-server-info.html
@@ -813,7 +813,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-upload-archive.html b/git-upload-archive.html index 7240ffb..c60273b 100644 --- a/git-upload-archive.html +++ b/git-upload-archive.html
@@ -832,7 +832,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-29 03:53:56 JST + 2022-10-28 11:53:56 PDT </div> </div> </body>
diff --git a/git-upload-pack.html b/git-upload-pack.html index b421c6f..9a9a704 100644 --- a/git-upload-pack.html +++ b/git-upload-pack.html
@@ -854,7 +854,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-var.html b/git-var.html index 13964d1..4d49b2a 100644 --- a/git-var.html +++ b/git-var.html
@@ -924,7 +924,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-verify-commit.html b/git-verify-commit.html index 6f5ace1..5d96af4 100644 --- a/git-verify-commit.html +++ b/git-verify-commit.html
@@ -806,7 +806,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-29 03:53:56 JST + 2022-10-28 11:53:56 PDT </div> </div> </body>
diff --git a/git-verify-pack.html b/git-verify-pack.html index 2ef00f8..3230d9f 100644 --- a/git-verify-pack.html +++ b/git-verify-pack.html
@@ -836,7 +836,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-verify-tag.html b/git-verify-tag.html index c7985cc..3e1786e 100644 --- a/git-verify-tag.html +++ b/git-verify-tag.html
@@ -806,7 +806,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-10-29 03:53:56 JST + 2022-10-28 11:53:56 PDT </div> </div> </body>
diff --git a/git-version.html b/git-version.html index f0cd995..689a0e3 100644 --- a/git-version.html +++ b/git-version.html
@@ -789,7 +789,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-09-24 06:33:59 JST + 2021-09-23 14:33:59 PDT </div> </div> </body>
diff --git a/git-web--browse.html b/git-web--browse.html index 35c3a91..60e675a 100644 --- a/git-web--browse.html +++ b/git-web--browse.html
@@ -964,7 +964,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/git-whatchanged.html b/git-whatchanged.html index 6a681b5..e1280a3 100644 --- a/git-whatchanged.html +++ b/git-whatchanged.html
@@ -803,7 +803,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/git-worktree.html b/git-worktree.html index 0f02f59..8eb6c94 100644 --- a/git-worktree.html +++ b/git-worktree.html
@@ -1399,7 +1399,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-21 08:56:50 JST + 2023-10-20 16:56:50 PDT </div> </div> </body>
diff --git a/git-write-tree.html b/git-write-tree.html index cd1d449..49ed13f 100644 --- a/git-write-tree.html +++ b/git-write-tree.html
@@ -805,7 +805,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/git.html b/git.html index 2d01f05..07f4de5 100644 --- a/git.html +++ b/git.html
@@ -3828,7 +3828,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-09 02:04:31 JST + 2023-11-08 09:04:31 PST </div> </div> </body>
diff --git a/gitattributes.html b/gitattributes.html index e01ee4c..848f4fa 100644 --- a/gitattributes.html +++ b/gitattributes.html
@@ -2246,7 +2246,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-30 08:42:00 JST + 2023-10-29 16:42:00 PDT </div> </div> </body>
diff --git a/gitcli.html b/gitcli.html index 0b4d92d..4ed8ec2 100644 --- a/gitcli.html +++ b/gitcli.html
@@ -1052,7 +1052,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitcore-tutorial.html b/gitcore-tutorial.html index 1f2c8b2..8821f1d 100644 --- a/gitcore-tutorial.html +++ b/gitcore-tutorial.html
@@ -2458,7 +2458,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/gitcredentials.html b/gitcredentials.html index b79e4c2..a05dc5b 100644 --- a/gitcredentials.html +++ b/gitcredentials.html
@@ -1122,7 +1122,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-07-19 00:52:58 JST + 2023-07-18 08:52:58 PDT </div> </div> </body>
diff --git a/gitcvs-migration.html b/gitcvs-migration.html index a4dbd62..2018d1a 100644 --- a/gitcvs-migration.html +++ b/gitcvs-migration.html
@@ -957,7 +957,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/gitdiffcore.html b/gitdiffcore.html index 9e44a45..b29f333 100644 --- a/gitdiffcore.html +++ b/gitdiffcore.html
@@ -1108,7 +1108,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/giteveryday.html b/giteveryday.html index 68388d9..4507ec4 100644 --- a/giteveryday.html +++ b/giteveryday.html
@@ -1546,7 +1546,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-30 08:42:00 JST + 2023-10-29 16:42:00 PDT </div> </div> </body>
diff --git a/gitfaq.html b/gitfaq.html index 70aba08..3ca5875 100644 --- a/gitfaq.html +++ b/gitfaq.html
@@ -1262,7 +1262,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-09-02 08:44:20 JST + 2021-09-01 16:44:20 PDT </div> </div> </body>
diff --git a/gitformat-bundle.html b/gitformat-bundle.html index a962c88..10befb2 100644 --- a/gitformat-bundle.html +++ b/gitformat-bundle.html
@@ -879,7 +879,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitformat-chunk.html b/gitformat-chunk.html index 2a08dad..99740ce 100644 --- a/gitformat-chunk.html +++ b/gitformat-chunk.html
@@ -888,7 +888,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitformat-commit-graph.html b/gitformat-commit-graph.html index 48084b5..feaa323 100644 --- a/gitformat-commit-graph.html +++ b/gitformat-commit-graph.html
@@ -1076,7 +1076,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-11-12 16:55:30 JST + 2022-11-11 23:55:30 PST </div> </div> </body>
diff --git a/gitformat-index.html b/gitformat-index.html index 204dd3e..940ea0c 100644 --- a/gitformat-index.html +++ b/gitformat-index.html
@@ -1493,7 +1493,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-02-10 09:57:15 JST + 2023-02-09 16:57:15 PST </div> </div> </body>
diff --git a/gitformat-pack.html b/gitformat-pack.html index 3f30309..0ec60b5 100644 --- a/gitformat-pack.html +++ b/gitformat-pack.html
@@ -1553,7 +1553,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-09 02:04:31 JST + 2023-11-08 09:04:31 PST </div> </div> </body>
diff --git a/gitformat-signature.html b/gitformat-signature.html index 90266d4..da48c3b 100644 --- a/gitformat-signature.html +++ b/gitformat-signature.html
@@ -1064,7 +1064,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-03-07 15:13:04 JST + 2023-03-06 22:13:04 PST </div> </div> </body>
diff --git a/gitglossary.html b/gitglossary.html index edda6d9..39a2fdd 100644 --- a/gitglossary.html +++ b/gitglossary.html
@@ -2001,7 +2001,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/githooks.html b/githooks.html index 9ec0b20..6d1777d 100644 --- a/githooks.html +++ b/githooks.html
@@ -1442,7 +1442,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitignore.html b/gitignore.html index 4a72a80..4203ade 100644 --- a/gitignore.html +++ b/gitignore.html
@@ -1073,7 +1073,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-07-28 07:46:24 JST + 2023-07-27 15:46:24 PDT </div> </div> </body>
diff --git a/gitk.html b/gitk.html index a2eabfc..a60354d 100644 --- a/gitk.html +++ b/gitk.html
@@ -1101,7 +1101,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-30 08:42:00 JST + 2023-10-29 16:42:00 PDT </div> </div> </body>
diff --git a/gitmailmap.html b/gitmailmap.html index 21e0421..0e09518 100644 --- a/gitmailmap.html +++ b/gitmailmap.html
@@ -892,7 +892,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-05-13 14:11:31 JST + 2021-05-12 22:11:31 PDT </div> </div> </body>
diff --git a/gitmodules.html b/gitmodules.html index 4206b68..a5fae00 100644 --- a/gitmodules.html +++ b/gitmodules.html
@@ -948,7 +948,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-08-05 04:03:14 JST + 2023-08-04 12:03:14 PDT </div> </div> </body>
diff --git a/gitnamespaces.html b/gitnamespaces.html index df10c21..5f21d87 100644 --- a/gitnamespaces.html +++ b/gitnamespaces.html
@@ -850,7 +850,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-05-07 13:22:01 JST + 2021-05-06 21:22:01 PDT </div> </div> </body>
diff --git a/gitprotocol-capabilities.html b/gitprotocol-capabilities.html index d28572d..3b4d5de 100644 --- a/gitprotocol-capabilities.html +++ b/gitprotocol-capabilities.html
@@ -1154,7 +1154,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitprotocol-common.html b/gitprotocol-common.html index 7ab286d..90d5db1 100644 --- a/gitprotocol-common.html +++ b/gitprotocol-common.html
@@ -889,7 +889,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitprotocol-http.html b/gitprotocol-http.html index bed4971..0285551 100644 --- a/gitprotocol-http.html +++ b/gitprotocol-http.html
@@ -1279,7 +1279,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitprotocol-pack.html b/gitprotocol-pack.html index 72ebc41..dc70204 100644 --- a/gitprotocol-pack.html +++ b/gitprotocol-pack.html
@@ -1494,7 +1494,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitprotocol-v2.html b/gitprotocol-v2.html index 69d06f3..7080f39 100644 --- a/gitprotocol-v2.html +++ b/gitprotocol-v2.html
@@ -1719,7 +1719,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitremote-helpers.html b/gitremote-helpers.html index 5181b9d..57b2958 100644 --- a/gitremote-helpers.html +++ b/gitremote-helpers.html
@@ -1537,7 +1537,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-09-02 05:55:22 JST + 2022-09-01 13:55:22 PDT </div> </div> </body>
diff --git a/gitrepository-layout.html b/gitrepository-layout.html index 17b40f6..1fe3723 100644 --- a/gitrepository-layout.html +++ b/gitrepository-layout.html
@@ -1372,7 +1372,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/gitrevisions.html b/gitrevisions.html index cc63fe3..764b805 100644 --- a/gitrevisions.html +++ b/gitrevisions.html
@@ -1417,7 +1417,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/gitsubmodules.html b/gitsubmodules.html index 853f320..f125266 100644 --- a/gitsubmodules.html +++ b/gitsubmodules.html
@@ -1113,7 +1113,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gittutorial-2.html b/gittutorial-2.html index 3f6717b..4be9cc5 100644 --- a/gittutorial-2.html +++ b/gittutorial-2.html
@@ -1171,7 +1171,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/gittutorial.html b/gittutorial.html index 3eadf05..78b57f9 100644 --- a/gittutorial.html +++ b/gittutorial.html
@@ -1374,7 +1374,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-19 05:44:22 JST + 2023-10-18 13:44:22 PDT </div> </div> </body>
diff --git a/gitweb.conf.html b/gitweb.conf.html index cb5bd4f..9369a34 100644 --- a/gitweb.conf.html +++ b/gitweb.conf.html
@@ -2015,7 +2015,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitweb.html b/gitweb.html index 044ac94..d9c01c7 100644 --- a/gitweb.html +++ b/gitweb.html
@@ -1642,7 +1642,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/gitworkflows.html b/gitworkflows.html index e68de91..4c63bc6 100644 --- a/gitworkflows.html +++ b/gitworkflows.html
@@ -1225,7 +1225,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2021-12-11 07:52:02 JST + 2021-12-10 14:52:02 PST </div> </div> </body>
diff --git a/howto/coordinate-embargoed-releases.html b/howto/coordinate-embargoed-releases.html index d573020..85f1a78 100644 --- a/howto/coordinate-embargoed-releases.html +++ b/howto/coordinate-embargoed-releases.html
@@ -1038,7 +1038,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:07 JST + 2023-12-09 17:41:26 PST </div> </div> </body>
diff --git a/howto/keep-canonical-history-correct.html b/howto/keep-canonical-history-correct.html index e19d734..ed65dee 100644 --- a/howto/keep-canonical-history-correct.html +++ b/howto/keep-canonical-history-correct.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Keep authoritative canonical history correct with git pull</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -939,7 +939,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:07 JST + 2023-12-09 17:41:26 PST </div> </div> </body>
diff --git a/howto/maintain-git.html b/howto/maintain-git.html index ec35401..7877539 100644 --- a/howto/maintain-git.html +++ b/howto/maintain-git.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to maintain Git</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -1479,7 +1479,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:07 JST + 2023-12-09 17:41:26 PST </div> </div> </body>
diff --git a/howto/new-command.html b/howto/new-command.html index 9bafae8..84f8bbc 100644 --- a/howto/new-command.html +++ b/howto/new-command.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to integrate new subcommands</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -864,7 +864,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:05 JST + 2023-12-09 17:41:24 PST </div> </div> </body>
diff --git a/howto/rebase-from-internal-branch.html b/howto/rebase-from-internal-branch.html index 35c41f9..318e7d2 100644 --- a/howto/rebase-from-internal-branch.html +++ b/howto/rebase-from-internal-branch.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to rebase from an internal branch</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -896,7 +896,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:07 JST + 2023-12-09 17:41:26 PST </div> </div> </body>
diff --git a/howto/rebuild-from-update-hook.html b/howto/rebuild-from-update-hook.html index fc3ee9e..b4ac28e 100644 --- a/howto/rebuild-from-update-hook.html +++ b/howto/rebuild-from-update-hook.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to rebuild from update hook</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -848,7 +848,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:07 JST + 2023-12-09 17:41:26 PST </div> </div> </body>
diff --git a/howto/recover-corrupted-blob-object.html b/howto/recover-corrupted-blob-object.html index c3c0eed..4b02780 100644 --- a/howto/recover-corrupted-blob-object.html +++ b/howto/recover-corrupted-blob-object.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to recover a corrupted blob object</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -881,7 +881,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:07 JST + 2023-12-09 17:41:26 PST </div> </div> </body>
diff --git a/howto/recover-corrupted-object-harder.html b/howto/recover-corrupted-object-harder.html index 6a38ae4..2865908 100644 --- a/howto/recover-corrupted-object-harder.html +++ b/howto/recover-corrupted-object-harder.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to recover an object from scratch</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -1190,7 +1190,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:07 JST + 2023-12-09 17:41:26 PST </div> </div> </body>
diff --git a/howto/revert-a-faulty-merge.html b/howto/revert-a-faulty-merge.html index 5e2e36e..3d5bc8a 100644 --- a/howto/revert-a-faulty-merge.html +++ b/howto/revert-a-faulty-merge.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to revert a faulty merge</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -1026,7 +1026,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:06 JST + 2023-12-09 17:41:26 PST </div> </div> </body>
diff --git a/howto/revert-branch-rebase.html b/howto/revert-branch-rebase.html index 62f7e16..b530fd2 100644 --- a/howto/revert-branch-rebase.html +++ b/howto/revert-branch-rebase.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to revert an existing commit</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -908,7 +908,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:05 JST + 2023-12-09 17:41:24 PST </div> </div> </body>
diff --git a/howto/separating-topic-branches.html b/howto/separating-topic-branches.html index 5e88f25..f6fd68c 100644 --- a/howto/separating-topic-branches.html +++ b/howto/separating-topic-branches.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to separate topic branches</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -842,7 +842,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:06 JST + 2023-12-09 17:41:25 PST </div> </div> </body>
diff --git a/howto/setup-git-server-over-http.html b/howto/setup-git-server-over-http.html index a29b677..5c4cd34 100644 --- a/howto/setup-git-server-over-http.html +++ b/howto/setup-git-server-over-http.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to setup Git server over http</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -1072,7 +1072,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:06 JST + 2023-12-09 17:41:25 PST </div> </div> </body>
diff --git a/howto/update-hook-example.html b/howto/update-hook-example.html index 898b005..a677b87 100644 --- a/howto/update-hook-example.html +++ b/howto/update-hook-example.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to use the update hook</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -931,7 +931,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:06 JST + 2023-12-09 17:41:25 PST </div> </div> </body>
diff --git a/howto/use-git-daemon.html b/howto/use-git-daemon.html index 33bfe6c..bc92e56 100644 --- a/howto/use-git-daemon.html +++ b/howto/use-git-daemon.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to use git-daemon</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -792,7 +792,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:06 JST + 2023-12-09 17:41:25 PST </div> </div> </body>
diff --git a/howto/using-merge-subtree.html b/howto/using-merge-subtree.html index 1c0a904..1098154 100644 --- a/howto/using-merge-subtree.html +++ b/howto/using-merge-subtree.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to use the subtree merge strategy</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -849,7 +849,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:06 JST + 2023-12-09 17:41:24 PST </div> </div> </body>
diff --git a/howto/using-signed-tag-in-pull-request.html b/howto/using-signed-tag-in-pull-request.html index 1fb56b9..b5743ec 100644 --- a/howto/using-signed-tag-in-pull-request.html +++ b/howto/using-signed-tag-in-pull-request.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>How to use a signed tag in pull requests</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -953,7 +953,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:06 JST + 2023-12-09 17:41:25 PST </div> </div> </body>
diff --git a/scalar.html b/scalar.html index b39c140..36729ba 100644 --- a/scalar.html +++ b/scalar.html
@@ -999,7 +999,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-08-30 06:18:03 JST + 2023-08-29 14:18:03 PDT </div> </div> </body>
diff --git a/technical/api-error-handling.html b/technical/api-error-handling.html index 4a573f5..95f34ee 100644 --- a/technical/api-error-handling.html +++ b/technical/api-error-handling.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Error reporting in git</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -879,7 +879,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-09-22 07:44:34 JST + 2022-09-21 15:44:34 PDT </div> </div> </body>
diff --git a/technical/api-index.html b/technical/api-index.html index 1c1267c..8ced060 100644 --- a/technical/api-index.html +++ b/technical/api-index.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Git API Documents</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -776,7 +776,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-11-21 01:57:10 JST + 2023-11-20 08:57:10 PST </div> </div> </body>
diff --git a/technical/api-merge.html b/technical/api-merge.html index ed4d6e9..eb1fc76 100644 --- a/technical/api-merge.html +++ b/technical/api-merge.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>merge API</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -802,7 +802,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-07-01 04:48:29 JST + 2023-06-30 12:48:29 PDT </div> </div> </body>
diff --git a/technical/api-parse-options.html b/technical/api-parse-options.html index 9a6dd43..c11b774 100644 --- a/technical/api-parse-options.html +++ b/technical/api-parse-options.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>parse-options API</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -1352,7 +1352,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-09-22 07:44:34 JST + 2022-09-21 15:44:34 PDT </div> </div> </body>
diff --git a/technical/api-simple-ipc.html b/technical/api-simple-ipc.html index abbb700..ffedaac 100644 --- a/technical/api-simple-ipc.html +++ b/technical/api-simple-ipc.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Simple-IPC API</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -841,7 +841,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/technical/api-trace2.html b/technical/api-trace2.html index 9b09520..aa75112 100644 --- a/technical/api-trace2.html +++ b/technical/api-trace2.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Trace2 API</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -2355,7 +2355,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-11-05 13:49:36 JST + 2022-11-04 21:49:36 PDT </div> </div> </body>
diff --git a/technical/bitmap-format.html b/technical/bitmap-format.html index d3a4618..56ef54f 100644 --- a/technical/bitmap-format.html +++ b/technical/bitmap-format.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>GIT bitmap v1 format</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -1209,7 +1209,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/technical/bundle-uri.html b/technical/bundle-uri.html index 7968042..db8d5f1 100644 --- a/technical/bundle-uri.html +++ b/technical/bundle-uri.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Bundle URIs</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -1464,7 +1464,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-02-23 08:29:29 JST + 2023-02-22 15:29:29 PST </div> </div> </body>
diff --git a/technical/hash-function-transition.html b/technical/hash-function-transition.html index 3246fe9..1c1541a 100644 --- a/technical/hash-function-transition.html +++ b/technical/hash-function-transition.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Git hash function transition</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -2088,7 +2088,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-01-31 07:44:53 JST + 2023-01-30 14:44:53 PST </div> </div> </body>
diff --git a/technical/long-running-process-protocol.html b/technical/long-running-process-protocol.html index 7529f95..dc77d36 100644 --- a/technical/long-running-process-protocol.html +++ b/technical/long-running-process-protocol.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Long-running process protocol</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -796,7 +796,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-08-19 06:11:07 JST + 2022-08-18 14:11:07 PDT </div> </div> </body>
diff --git a/technical/multi-pack-index.html b/technical/multi-pack-index.html index 05b75b8..66e4c80 100644 --- a/technical/multi-pack-index.html +++ b/technical/multi-pack-index.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Multi-Pack-Index (MIDX) Design Notes</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -913,7 +913,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-02-17 10:29:08 JST + 2022-02-16 17:29:08 PST </div> </div> </body>
diff --git a/technical/pack-heuristics.html b/technical/pack-heuristics.html index c1abfab..8a19c96 100644 --- a/technical/pack-heuristics.html +++ b/technical/pack-heuristics.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Concerning Git’s Packing Heuristics</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -1344,7 +1344,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/technical/parallel-checkout.html b/technical/parallel-checkout.html index 564e4fe..8c84be7 100644 --- a/technical/parallel-checkout.html +++ b/technical/parallel-checkout.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Parallel Checkout Design Notes</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -1076,7 +1076,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/technical/partial-clone.html b/technical/partial-clone.html index 22b779b..39dc073 100644 --- a/technical/partial-clone.html +++ b/technical/partial-clone.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Partial Clone Design Notes</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -1214,7 +1214,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/technical/racy-git.html b/technical/racy-git.html index 88ffb00..ca4b7a0 100644 --- a/technical/racy-git.html +++ b/technical/racy-git.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Use of index and Racy Git problem</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -953,7 +953,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/technical/reftable.html b/technical/reftable.html index 0b6e631..d226a68 100644 --- a/technical/reftable.html +++ b/technical/reftable.html
@@ -2056,7 +2056,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2023-10-24 06:43:46 JST + 2023-10-23 14:43:46 PDT </div> </div> </body>
diff --git a/technical/scalar.html b/technical/scalar.html index 8a4c610..0bd4bb2 100644 --- a/technical/scalar.html +++ b/technical/scalar.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Scalar</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -834,7 +834,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2022-09-20 07:03:44 JST + 2022-09-19 15:03:44 PDT </div> </div> </body>
diff --git a/technical/send-pack-pipeline.html b/technical/send-pack-pipeline.html index 63b7528..d4bb0d6 100644 --- a/technical/send-pack-pipeline.html +++ b/technical/send-pack-pipeline.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Git-send-pack internals</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div class="sect1"> @@ -828,7 +828,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/technical/shallow.html b/technical/shallow.html index 9de5814..7e79cf3 100644 --- a/technical/shallow.html +++ b/technical/shallow.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Shallow commits</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -814,7 +814,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-08-20 14:10:31 JST + 2020-08-19 22:10:31 PDT </div> </div> </body>
diff --git a/technical/trivial-merge.html b/technical/trivial-merge.html index 402496a..657ca44 100644 --- a/technical/trivial-merge.html +++ b/technical/trivial-merge.html
@@ -735,7 +735,7 @@ <body class="article"> <div id="header"> <h1>Trivial merge rules</h1> -<span id="revdate">2023-11-20</span> +<span id="revdate">2023-12-09</span> </div> <div id="content"> <div id="preamble"> @@ -857,7 +857,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2020-03-11 07:02:33 JST + 2020-03-10 15:02:33 PDT </div> </div> </body>
diff --git a/technical/unit-tests.html b/technical/unit-tests.html new file mode 100644 index 0000000..45a9cd4 --- /dev/null +++ b/technical/unit-tests.html
@@ -0,0 +1,1216 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> +<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /> +<meta name="generator" content="AsciiDoc 10.2.0" /> +<title>Unit Testing</title> +<style type="text/css"> +/* Shared CSS for AsciiDoc xhtml11 and html5 backends */ + +/* Default font. */ +body { + font-family: Georgia,serif; +} + +/* Title font. */ +h1, h2, h3, h4, h5, h6, +div.title, caption.title, +thead, p.table.header, +#toctitle, +#author, #revnumber, #revdate, #revremark, +#footer { + font-family: Arial,Helvetica,sans-serif; +} + +body { + margin: 1em 5% 1em 5%; +} + +a { + color: blue; + text-decoration: underline; +} +a:visited { + color: fuchsia; +} + +em { + font-style: italic; + color: navy; +} + +strong { + font-weight: bold; + color: #083194; +} + +h1, h2, h3, h4, h5, h6 { + color: #527bbd; + margin-top: 1.2em; + margin-bottom: 0.5em; + line-height: 1.3; +} + +h1, h2, h3 { + border-bottom: 2px solid silver; +} +h2 { + padding-top: 0.5em; +} +h3 { + float: left; +} +h3 + * { + clear: left; +} +h5 { + font-size: 1.0em; +} + +div.sectionbody { + margin-left: 0; +} + +hr { + border: 1px solid silver; +} + +p { + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +ul, ol, li > p { + margin-top: 0; +} +ul > li { color: #aaa; } +ul > li > * { color: black; } + +.monospaced, code, pre { + font-family: "Courier New", Courier, monospace; + font-size: inherit; + color: navy; + padding: 0; + margin: 0; +} +pre { + white-space: pre-wrap; +} + +#author { + color: #527bbd; + font-weight: bold; + font-size: 1.1em; +} +#email { +} +#revnumber, #revdate, #revremark { +} + +#footer { + font-size: small; + border-top: 2px solid silver; + padding-top: 0.5em; + margin-top: 4.0em; +} +#footer-text { + float: left; + padding-bottom: 0.5em; +} +#footer-badges { + float: right; + padding-bottom: 0.5em; +} + +#preamble { + margin-top: 1.5em; + margin-bottom: 1.5em; +} +div.imageblock, div.exampleblock, div.verseblock, +div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, +div.admonitionblock { + margin-top: 1.0em; + margin-bottom: 1.5em; +} +div.admonitionblock { + margin-top: 2.0em; + margin-bottom: 2.0em; + margin-right: 10%; + color: #606060; +} + +div.content { /* Block element content. */ + padding: 0; +} + +/* Block element titles. */ +div.title, caption.title { + color: #527bbd; + font-weight: bold; + text-align: left; + margin-top: 1.0em; + margin-bottom: 0.5em; +} +div.title + * { + margin-top: 0; +} + +td div.title:first-child { + margin-top: 0.0em; +} +div.content div.title:first-child { + margin-top: 0.0em; +} +div.content + div.title { + margin-top: 0.0em; +} + +div.sidebarblock > div.content { + background: #ffffee; + border: 1px solid #dddddd; + border-left: 4px solid #f0f0f0; + padding: 0.5em; +} + +div.listingblock > div.content { + border: 1px solid #dddddd; + border-left: 5px solid #f0f0f0; + background: #f8f8f8; + padding: 0.5em; +} + +div.quoteblock, div.verseblock { + padding-left: 1.0em; + margin-left: 1.0em; + margin-right: 10%; + border-left: 5px solid #f0f0f0; + color: #888; +} + +div.quoteblock > div.attribution { + padding-top: 0.5em; + text-align: right; +} + +div.verseblock > pre.content { + font-family: inherit; + font-size: inherit; +} +div.verseblock > div.attribution { + padding-top: 0.75em; + text-align: left; +} +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */ +div.verseblock + div.attribution { + text-align: left; +} + +div.admonitionblock .icon { + vertical-align: top; + font-size: 1.1em; + font-weight: bold; + text-decoration: underline; + color: #527bbd; + padding-right: 0.5em; +} +div.admonitionblock td.content { + padding-left: 0.5em; + border-left: 3px solid #dddddd; +} + +div.exampleblock > div.content { + border-left: 3px solid #dddddd; + padding-left: 0.5em; +} + +div.imageblock div.content { padding-left: 0; } +span.image img { border-style: none; vertical-align: text-bottom; } +a.image:visited { color: white; } + +dl { + margin-top: 0.8em; + margin-bottom: 0.8em; +} +dt { + margin-top: 0.5em; + margin-bottom: 0; + font-style: normal; + color: navy; +} +dd > *:first-child { + margin-top: 0.1em; +} + +ul, ol { + list-style-position: outside; +} +ol.arabic { + list-style-type: decimal; +} +ol.loweralpha { + list-style-type: lower-alpha; +} +ol.upperalpha { + list-style-type: upper-alpha; +} +ol.lowerroman { + list-style-type: lower-roman; +} +ol.upperroman { + list-style-type: upper-roman; +} + +div.compact ul, div.compact ol, +div.compact p, div.compact p, +div.compact div, div.compact div { + margin-top: 0.1em; + margin-bottom: 0.1em; +} + +tfoot { + font-weight: bold; +} +td > div.verse { + white-space: pre; +} + +div.hdlist { + margin-top: 0.8em; + margin-bottom: 0.8em; +} +div.hdlist tr { + padding-bottom: 15px; +} +dt.hdlist1.strong, td.hdlist1.strong { + font-weight: bold; +} +td.hdlist1 { + vertical-align: top; + font-style: normal; + padding-right: 0.8em; + color: navy; +} +td.hdlist2 { + vertical-align: top; +} +div.hdlist.compact tr { + margin: 0; + padding-bottom: 0; +} + +.comment { + background: yellow; +} + +.footnote, .footnoteref { + font-size: 0.8em; +} + +span.footnote, span.footnoteref { + vertical-align: super; +} + +#footnotes { + margin: 20px 0 20px 0; + padding: 7px 0 0 0; +} + +#footnotes div.footnote { + margin: 0 0 5px 0; +} + +#footnotes hr { + border: none; + border-top: 1px solid silver; + height: 1px; + text-align: left; + margin-left: 0; + width: 20%; + min-width: 100px; +} + +div.colist td { + padding-right: 0.5em; + padding-bottom: 0.3em; + vertical-align: top; +} +div.colist td img { + margin-top: 0.3em; +} + +@media print { + #footer-badges { display: none; } +} + +#toc { + margin-bottom: 2.5em; +} + +#toctitle { + color: #527bbd; + font-size: 1.1em; + font-weight: bold; + margin-top: 1.0em; + margin-bottom: 0.1em; +} + +div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { + margin-top: 0; + margin-bottom: 0; +} +div.toclevel2 { + margin-left: 2em; + font-size: 0.9em; +} +div.toclevel3 { + margin-left: 4em; + font-size: 0.9em; +} +div.toclevel4 { + margin-left: 6em; + font-size: 0.9em; +} + +span.aqua { color: aqua; } +span.black { color: black; } +span.blue { color: blue; } +span.fuchsia { color: fuchsia; } +span.gray { color: gray; } +span.green { color: green; } +span.lime { color: lime; } +span.maroon { color: maroon; } +span.navy { color: navy; } +span.olive { color: olive; } +span.purple { color: purple; } +span.red { color: red; } +span.silver { color: silver; } +span.teal { color: teal; } +span.white { color: white; } +span.yellow { color: yellow; } + +span.aqua-background { background: aqua; } +span.black-background { background: black; } +span.blue-background { background: blue; } +span.fuchsia-background { background: fuchsia; } +span.gray-background { background: gray; } +span.green-background { background: green; } +span.lime-background { background: lime; } +span.maroon-background { background: maroon; } +span.navy-background { background: navy; } +span.olive-background { background: olive; } +span.purple-background { background: purple; } +span.red-background { background: red; } +span.silver-background { background: silver; } +span.teal-background { background: teal; } +span.white-background { background: white; } +span.yellow-background { background: yellow; } + +span.big { font-size: 2em; } +span.small { font-size: 0.6em; } + +span.underline { text-decoration: underline; } +span.overline { text-decoration: overline; } +span.line-through { text-decoration: line-through; } + +div.unbreakable { page-break-inside: avoid; } + + +/* + * xhtml11 specific + * + * */ + +div.tableblock { + margin-top: 1.0em; + margin-bottom: 1.5em; +} +div.tableblock > table { + border: 3px solid #527bbd; +} +thead, p.table.header { + font-weight: bold; + color: #527bbd; +} +p.table { + margin-top: 0; +} +/* Because the table frame attribute is overridden by CSS in most browsers. */ +div.tableblock > table[frame="void"] { + border-style: none; +} +div.tableblock > table[frame="hsides"] { + border-left-style: none; + border-right-style: none; +} +div.tableblock > table[frame="vsides"] { + border-top-style: none; + border-bottom-style: none; +} + + +/* + * html5 specific + * + * */ + +table.tableblock { + margin-top: 1.0em; + margin-bottom: 1.5em; +} +thead, p.tableblock.header { + font-weight: bold; + color: #527bbd; +} +p.tableblock { + margin-top: 0; +} +table.tableblock { + border-width: 3px; + border-spacing: 0px; + border-style: solid; + border-color: #527bbd; + border-collapse: collapse; +} +th.tableblock, td.tableblock { + border-width: 1px; + padding: 4px; + border-style: solid; + border-color: #527bbd; +} + +table.tableblock.frame-topbot { + border-left-style: hidden; + border-right-style: hidden; +} +table.tableblock.frame-sides { + border-top-style: hidden; + border-bottom-style: hidden; +} +table.tableblock.frame-none { + border-style: hidden; +} + +th.tableblock.halign-left, td.tableblock.halign-left { + text-align: left; +} +th.tableblock.halign-center, td.tableblock.halign-center { + text-align: center; +} +th.tableblock.halign-right, td.tableblock.halign-right { + text-align: right; +} + +th.tableblock.valign-top, td.tableblock.valign-top { + vertical-align: top; +} +th.tableblock.valign-middle, td.tableblock.valign-middle { + vertical-align: middle; +} +th.tableblock.valign-bottom, td.tableblock.valign-bottom { + vertical-align: bottom; +} + + +/* + * manpage specific + * + * */ + +body.manpage h1 { + padding-top: 0.5em; + padding-bottom: 0.5em; + border-top: 2px solid silver; + border-bottom: 2px solid silver; +} +body.manpage h2 { + border-style: none; +} +body.manpage div.sectionbody { + margin-left: 3em; +} + +@media print { + body.manpage div#toc { display: none; } +} + + +</style> +<script type="text/javascript"> +/*<+'])'); + // Function that scans the DOM tree for header elements (the DOM2 + // nodeIterator API would be a better technique but not supported by all + // browsers). + var iterate = function (el) { + for (var i = el.firstChild; i != null; i = i.nextSibling) { + if (i.nodeType == 1 /* Node.ELEMENT_NODE */) { + var mo = re.exec(i.tagName); + if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") { + result[result.length] = new TocEntry(i, getText(i), mo[1]-1); + } + iterate(i); + } + } + } + iterate(el); + return result; + } + + var toc = document.getElementById("toc"); + if (!toc) { + return; + } + + // Delete existing TOC entries in case we're reloading the TOC. + var tocEntriesToRemove = []; + var i; + for (i = 0; i < toc.childNodes.length; i++) { + var entry = toc.childNodes[i]; + if (entry.nodeName.toLowerCase() == 'div' + && entry.getAttribute("class") + && entry.getAttribute("class").match(/^toclevel/)) + tocEntriesToRemove.push(entry); + } + for (i = 0; i < tocEntriesToRemove.length; i++) { + toc.removeChild(tocEntriesToRemove[i]); + } + + // Rebuild TOC entries. + var entries = tocEntries(document.getElementById("content"), toclevels); + for (var i = 0; i < entries.length; ++i) { + var entry = entries[i]; + if (entry.element.id == "") + entry.element.id = "_toc_" + i; + var a = document.createElement("a"); + a.href = "#" + entry.element.id; + a.appendChild(document.createTextNode(entry.text)); + var div = document.createElement("div"); + div.appendChild(a); + div.className = "toclevel" + entry.toclevel; + toc.appendChild(div); + } + if (entries.length == 0) + toc.parentNode.removeChild(toc); +}, + + +///////////////////////////////////////////////////////////////////// +// Footnotes generator +///////////////////////////////////////////////////////////////////// + +/* Based on footnote generation code from: + * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html + */ + +footnotes: function () { + // Delete existing footnote entries in case we're reloading the footnodes. + var i; + var noteholder = document.getElementById("footnotes"); + if (!noteholder) { + return; + } + var entriesToRemove = []; + for (i = 0; i < noteholder.childNodes.length; i++) { + var entry = noteholder.childNodes[i]; + if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote") + entriesToRemove.push(entry); + } + for (i = 0; i < entriesToRemove.length; i++) { + noteholder.removeChild(entriesToRemove[i]); + } + + // Rebuild footnote entries. + var cont = document.getElementById("content"); + var spans = cont.getElementsByTagName("span"); + var refs = {}; + var n = 0; + for (i=0; i<spans.length; i++) { + if (spans[i].className == "footnote") { + n++; + var note = spans[i].getAttribute("data-note"); + if (!note) { + // Use [\s\S] in place of . so multi-line matches work. + // Because JavaScript has no s (dotall) regex flag. + note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1]; + spans[i].innerHTML = + "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n + + "' title='View footnote' class='footnote'>" + n + "</a>]"; + spans[i].setAttribute("data-note", note); + } + noteholder.innerHTML += + "<div class='footnote' id='_footnote_" + n + "'>" + + "<a href='#_footnoteref_" + n + "' title='Return to text'>" + + n + "</a>. " + note + "</div>"; + var id =spans[i].getAttribute("id"); + if (id != null) refs["#"+id] = n; + } + } + if (n == 0) + noteholder.parentNode.removeChild(noteholder); + else { + // Process footnoterefs. + for (i=0; i<spans.length; i++) { + if (spans[i].className == "footnoteref") { + var href = spans[i].getElementsByTagName("a")[0].getAttribute("href"); + href = href.match(/#.*/)[0]; // Because IE return full URL. + n = refs[href]; + spans[i].innerHTML = + "[<a href='#_footnote_" + n + + "' title='View footnote' class='footnote'>" + n + "</a>]"; + } + } + } +}, + +install: function(toclevels) { + var timerId; + + function reinstall() { + asciidoc.footnotes(); + if (toclevels) { + asciidoc.toc(toclevels); + } + } + + function reinstallAndRemoveTimer() { + clearInterval(timerId); + reinstall(); + } + + timerId = setInterval(reinstall, 500); + if (document.addEventListener) + document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false); + else + window.onload = reinstallAndRemoveTimer; +} + +} +asciidoc.install(); +/*]]>*/ +</script> +</head> +<body class="article"> +<div id="header"> +<h1>Unit Testing</h1> +<span id="revdate">2023-12-09</span> +</div> +<div id="content"> +<div id="preamble"> +<div class="sectionbody"> +<div class="paragraph"><p>In our current testing environment, we spend a significant amount of effort +crafting end-to-end tests for error conditions that could easily be captured by +unit tests (or we simply forgo some hard-to-setup and rare error conditions). +Unit tests additionally provide stability to the codebase and can simplify +debugging through isolation. Writing unit tests in pure C, rather than with our +current shell/test-tool helper setup, simplifies test setup, simplifies passing +data around (no shell-isms required), and reduces testing runtime by not +spawning a separate process for every test invocation.</p></div> +<div class="paragraph"><p>We believe that a large body of unit tests, living alongside the existing test +suite, will improve code quality for the Git project.</p></div> +</div> +</div> +<div class="sect1"> +<h2 id="_definitions">Definitions</h2> +<div class="sectionbody"> +<div class="paragraph"><p>For the purposes of this document, we’ll use <strong>test framework</strong> to refer to +projects that support writing test cases and running tests within the context +of a single executable. <strong>Test harness</strong> will refer to projects that manage +running multiple executables (each of which may contain multiple test cases) and +aggregating their results.</p></div> +<div class="paragraph"><p>In reality, these terms are not strictly defined, and many of the projects +discussed below contain features from both categories.</p></div> +<div class="paragraph"><p>For now, we will evaluate projects solely on their framework features. Since we +are relying on having TAP output (see below), we can assume that any framework +can be made to work with a harness that we can choose later.</p></div> +</div> +</div> +<div class="sect1"> +<h2 id="_summary">Summary</h2> +<div class="sectionbody"> +<div class="paragraph"><p>We believe the best way forward is to implement a custom TAP framework for the +Git project. We use a version of the framework originally proposed in +<a href="https://lore.kernel.org/git/c902a166-98ce-afba-93f2-ea6027557176@gmail.com/">1</a>.</p></div> +<div class="paragraph"><p>See the <a href="#framework-selection">Framework Selection</a> section below for the +rationale behind this decision.</p></div> +</div> +</div> +<div class="sect1"> +<h2 id="_choosing_a_test_harness">Choosing a test harness</h2> +<div class="sectionbody"> +<div class="paragraph"><p>During upstream discussion, it was occasionally noted that <code>prove</code> provides many +convenient features, such as scheduling slower tests first, or re-running +previously failed tests.</p></div> +<div class="paragraph"><p>While we already support the use of <code>prove</code> as a test harness for the shell +tests, it is not strictly required. The t/Makefile allows running shell tests +directly (though with interleaved output if parallelism is enabled). Git +developers who wish to use <code>prove</code> as a more advanced harness can do so by +setting DEFAULT_TEST_TARGET=prove in their config.mak.</p></div> +<div class="paragraph"><p>We will follow a similar approach for unit tests: by default the test +executables will be run directly from the t/Makefile, but <code>prove</code> can be +configured with DEFAULT_UNIT_TEST_TARGET=prove.</p></div> +</div> +</div> +<div class="sect1"> +<h2 id="framework-selection">Framework selection</h2> +<div class="sectionbody"> +<div class="paragraph"><p>There are a variety of features we can use to rank the candidate frameworks, and +those features have different priorities:</p></div> +<div class="ulist"><ul> +<li> +<p> +Critical features: we probably won’t consider a framework without these +</p> +<div class="ulist"><ul> +<li> +<p> +Can we legally / easily use the project? +</p> +<div class="ulist"><ul> +<li> +<p> +<a href="#license">License</a> +</p> +</li> +<li> +<p> +<a href="#vendorable-or-ubiquitous">Vendorable or ubiquitous</a> +</p> +</li> +<li> +<p> +<a href="#maintainable-extensible">Maintainable / extensible</a> +</p> +</li> +<li> +<p> +<a href="#major-platform-support">Major platform support</a> +</p> +</li> +</ul></div> +</li> +<li> +<p> +Does the project support our bare-minimum needs? +</p> +<div class="ulist"><ul> +<li> +<p> +<a href="#tap-support">TAP support</a> +</p> +</li> +<li> +<p> +<a href="#diagnostic-output">Diagnostic output</a> +</p> +</li> +<li> +<p> +<a href="#runtime-skippable-tests">Runtime-skippable tests</a> +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +Nice-to-have features: +</p> +<div class="ulist"><ul> +<li> +<p> +<a href="#parallel-execution">Parallel execution</a> +</p> +</li> +<li> +<p> +<a href="#mock-support">Mock support</a> +</p> +</li> +<li> +<p> +<a href="#signal-error-handling">Signal & error-handling</a> +</p> +</li> +</ul></div> +</li> +<li> +<p> +Tie-breaker stats +</p> +<div class="ulist"><ul> +<li> +<p> +<a href="#project-kloc">Project KLOC</a> +</p> +</li> +<li> +<p> +<a href="#adoption">Adoption</a> +</p> +</li> +</ul></div> +</li> +</ul></div> +<div class="sect2"> +<h3 id="license">License</h3> +<div class="paragraph"><p>We must be able to legally use the framework in connection with Git. As Git is +licensed only under GPLv2, we must eliminate any LGPLv3, GPLv3, or Apache 2.0 +projects.</p></div> +</div> +<div class="sect2"> +<h3 id="vendorable-or-ubiquitous">Vendorable or ubiquitous</h3> +<div class="paragraph"><p>We want to avoid forcing Git developers to install new tools just to run unit +tests. Any prospective frameworks and harnesses must either be vendorable +(meaning, we can copy their source directly into Git’s repository), or so +ubiquitous that it is reasonable to expect that most developers will have the +tools installed already.</p></div> +</div> +<div class="sect2"> +<h3 id="maintainable-extensible">Maintainable / extensible</h3> +<div class="paragraph"><p>It is unlikely that any pre-existing project perfectly fits our needs, so any +project we select will need to be actively maintained and open to accepting +changes. Alternatively, assuming we are vendoring the source into our repo, it +must be simple enough that Git developers can feel comfortable making changes as +needed to our version.</p></div> +<div class="paragraph"><p>In the comparison table below, "True" means that the framework seems to have +active developers, that it is simple enough that Git developers can make changes +to it, and that the project seems open to accepting external contributions (or +that it is vendorable). "Partial" means that at least one of the above +conditions holds.</p></div> +</div> +<div class="sect2"> +<h3 id="major-platform-support">Major platform support</h3> +<div class="paragraph"><p>At a bare minimum, unit-testing must work on Linux, MacOS, and Windows.</p></div> +<div class="paragraph"><p>In the comparison table below, "True" means that it works on all three major +platforms with no issues. "Partial" means that there may be annoyances on one or +more platforms, but it is still usable in principle.</p></div> +</div> +<div class="sect2"> +<h3 id="tap-support">TAP support</h3> +<div class="paragraph"><p>The <a href="https://testanything.org/">Test Anything Protocol</a> is a text-based interface +that allows tests to communicate with a test harness. It is already used by +Git’s integration test suite. Supporting TAP output is a mandatory feature for +any prospective test framework.</p></div> +<div class="paragraph"><p>In the comparison table below, "True" means this is natively supported. +"Partial" means TAP output must be generated by post-processing the native +output.</p></div> +<div class="paragraph"><p>Frameworks that do not have at least Partial support will not be evaluated +further.</p></div> +</div> +<div class="sect2"> +<h3 id="diagnostic-output">Diagnostic output</h3> +<div class="paragraph"><p>When a test case fails, the framework must generate enough diagnostic output to +help developers find the appropriate test case in source code in order to debug +the failure.</p></div> +</div> +<div class="sect2"> +<h3 id="runtime-skippable-tests">Runtime-skippable tests</h3> +<div class="paragraph"><p>Test authors may wish to skip certain test cases based on runtime circumstances, +so the framework should support this.</p></div> +</div> +<div class="sect2"> +<h3 id="parallel-execution">Parallel execution</h3> +<div class="paragraph"><p>Ideally, we will build up a significant collection of unit test cases, most +likely split across multiple executables. It will be necessary to run these +tests in parallel to enable fast develop-test-debug cycles.</p></div> +<div class="paragraph"><p>In the comparison table below, "True" means that individual test cases within a +single test executable can be run in parallel. We assume that executable-level +parallelism can be handled by the test harness.</p></div> +</div> +<div class="sect2"> +<h3 id="mock-support">Mock support</h3> +<div class="paragraph"><p>Unit test authors may wish to test code that interacts with objects that may be +inconvenient to handle in a test (e.g. interacting with a network service). +Mocking allows test authors to provide a fake implementation of these objects +for more convenient tests.</p></div> +</div> +<div class="sect2"> +<h3 id="signal-error-handling">Signal & error handling</h3> +<div class="paragraph"><p>The test framework should fail gracefully when test cases are themselves buggy +or when they are interrupted by signals during runtime.</p></div> +</div> +<div class="sect2"> +<h3 id="project-kloc">Project KLOC</h3> +<div class="paragraph"><p>The size of the project, in thousands of lines of code as measured by +<a href="https://dwheeler.com/sloccount/">sloccount</a> (rounded up to the next multiple of +1,000). As a tie-breaker, we probably prefer a project with fewer LOC.</p></div> +</div> +<div class="sect2"> +<h3 id="adoption">Adoption</h3> +<div class="paragraph"><p>As a tie-breaker, we prefer a more widely-used project. We use the number of +GitHub / GitLab stars to estimate this.</p></div> +</div> +<div class="sect2"> +<h3 id="_comparison">Comparison</h3> +<div class="tableblock"> +<table rules="all" +width="33%" +frame="border" +cellspacing="0" cellpadding="4"> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<col width="4%" /> +<thead> +<tr> +<th align="left" valign="top">Framework</th> +<th align="left" valign="top"><a href="#license">License</a></th> +<th align="left" valign="top"><a href="#vendorable-or-ubiquitous">Vendorable or ubiquitous</a></th> +<th align="left" valign="top"><a href="#maintainable-extensible">Maintainable / extensible</a></th> +<th align="left" valign="top"><a href="#major-platform-support">Major platform support</a></th> +<th align="left" valign="top"><a href="#tap-support">TAP support</a></th> +<th align="left" valign="top"><a href="#diagnostic-output">Diagnostic output</a></th> +<th align="left" valign="top"><a href="#runtime--skippable-tests">Runtime- skippable tests</a></th> +<th align="left" valign="top"><a href="#parallel-execution">Parallel execution</a></th> +<th align="left" valign="top"><a href="#mock-support">Mock support</a></th> +<th align="left" valign="top"><a href="#signal-error-handling">Signal & error handling</a></th> +<th align="left" valign="top"><a href="#project-kloc">Project KLOC</a></th> +<th align="left" valign="top"><a href="#adoption">Adoption</a></th> +</tr> +</thead> +<tbody> +<tr> +<td align="left" valign="top"><p class="table"><a href="https://lore.kernel.org/git/c902a166-98ce-afba-93f2-ea6027557176@gmail.com/">Custom Git impl.</a></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">GPL v2</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table">1</p></td> +<td align="left" valign="top"><p class="table">0</p></td> +</tr> +<tr> +<td align="left" valign="top"><p class="table"><a href="https://github.com/silentbicycle/greatest">Greatest</a></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">ISC</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table">3</p></td> +<td align="left" valign="top"><p class="table">1400</p></td> +</tr> +<tr> +<td align="left" valign="top"><p class="table"><a href="https://github.com/Snaipe/Criterion">Criterion</a></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">MIT</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table">19</p></td> +<td align="left" valign="top"><p class="table">1800</p></td> +</tr> +<tr> +<td align="left" valign="top"><p class="table"><a href="https://github.com/rra/c-tap-harness/">C TAP</a></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">Expat</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td> +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table">4</p></td> +<td align="left" valign="top"><p class="table">33</p></td> +</tr> +<tr> +<td align="left" valign="top"><p class="table"><a href="https://libcheck.github.io/check/">Check</a></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">LGPL v2.1</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td> +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td> +<td align="left" valign="top"><p class="table">17</p></td> +<td align="left" valign="top"><p class="table">973</p></td> +</tr> +</tbody> +</table> +</div> +</div> +<div class="sect2"> +<h3 id="_additional_framework_candidates">Additional framework candidates</h3> +<div class="paragraph"><p>Several suggested frameworks have been eliminated from consideration:</p></div> +<div class="ulist"><ul> +<li> +<p> +Incompatible licenses: +</p> +<div class="ulist"><ul> +<li> +<p> +<a href="https://github.com/zorgnax/libtap">libtap</a> (LGPL v3) +</p> +</li> +<li> +<p> +<a href="https://cmocka.org/">cmocka</a> (Apache 2.0) +</p> +</li> +</ul></div> +</li> +<li> +<p> +Missing source: <a href="https://www.kindahl.net/mytap/doc/index.html">MyTap</a> +</p> +</li> +<li> +<p> +No TAP support: +</p> +<div class="ulist"><ul> +<li> +<p> +<a href="https://nemequ.github.io/munit/">µnit</a> +</p> +</li> +<li> +<p> +<a href="https://github.com/google/cmockery">cmockery</a> +</p> +</li> +<li> +<p> +<a href="https://github.com/lpabon/cmockery2">cmockery2</a> +</p> +</li> +<li> +<p> +<a href="https://github.com/ThrowTheSwitch/Unity">Unity</a> +</p> +</li> +<li> +<p> +<a href="https://github.com/siu/minunit">minunit</a> +</p> +</li> +<li> +<p> +<a href="https://cunit.sourceforge.net/">CUnit</a> +</p> +</li> +</ul></div> +</li> +</ul></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_milestones">Milestones</h2> +<div class="sectionbody"> +<div class="ulist"><ul> +<li> +<p> +Add useful tests of library-like code +</p> +</li> +<li> +<p> +Integrate with + <a href="https://lore.kernel.org/git/20230502211454.1673000-1-calvinwan@google.com/">stdlib + work</a> +</p> +</li> +<li> +<p> +Run alongside regular <code>make test</code> target +</p> +</li> +</ul></div> +</div> +</div> +</div> +<div id="footnotes"><hr /></div> +<div id="footer"> +<div id="footer-text"> +Last updated + 2023-12-09 17:40:53 PST +</div> +</div> +</body> +</html>
diff --git a/technical/unit-tests.txt b/technical/unit-tests.txt new file mode 100644 index 0000000..206037f --- /dev/null +++ b/technical/unit-tests.txt
@@ -0,0 +1,240 @@ += Unit Testing + +In our current testing environment, we spend a significant amount of effort +crafting end-to-end tests for error conditions that could easily be captured by +unit tests (or we simply forgo some hard-to-setup and rare error conditions). +Unit tests additionally provide stability to the codebase and can simplify +debugging through isolation. Writing unit tests in pure C, rather than with our +current shell/test-tool helper setup, simplifies test setup, simplifies passing +data around (no shell-isms required), and reduces testing runtime by not +spawning a separate process for every test invocation. + +We believe that a large body of unit tests, living alongside the existing test +suite, will improve code quality for the Git project. + +== Definitions + +For the purposes of this document, we'll use *test framework* to refer to +projects that support writing test cases and running tests within the context +of a single executable. *Test harness* will refer to projects that manage +running multiple executables (each of which may contain multiple test cases) and +aggregating their results. + +In reality, these terms are not strictly defined, and many of the projects +discussed below contain features from both categories. + +For now, we will evaluate projects solely on their framework features. Since we +are relying on having TAP output (see below), we can assume that any framework +can be made to work with a harness that we can choose later. + + +== Summary + +We believe the best way forward is to implement a custom TAP framework for the +Git project. We use a version of the framework originally proposed in +https://lore.kernel.org/git/c902a166-98ce-afba-93f2-ea6027557176@gmail.com/[1]. + +See the <<framework-selection,Framework Selection>> section below for the +rationale behind this decision. + + +== Choosing a test harness + +During upstream discussion, it was occasionally noted that `prove` provides many +convenient features, such as scheduling slower tests first, or re-running +previously failed tests. + +While we already support the use of `prove` as a test harness for the shell +tests, it is not strictly required. The t/Makefile allows running shell tests +directly (though with interleaved output if parallelism is enabled). Git +developers who wish to use `prove` as a more advanced harness can do so by +setting DEFAULT_TEST_TARGET=prove in their config.mak. + +We will follow a similar approach for unit tests: by default the test +executables will be run directly from the t/Makefile, but `prove` can be +configured with DEFAULT_UNIT_TEST_TARGET=prove. + + +[[framework-selection]] +== Framework selection + +There are a variety of features we can use to rank the candidate frameworks, and +those features have different priorities: + +* Critical features: we probably won't consider a framework without these +** Can we legally / easily use the project? +*** <<license,License>> +*** <<vendorable-or-ubiquitous,Vendorable or ubiquitous>> +*** <<maintainable-extensible,Maintainable / extensible>> +*** <<major-platform-support,Major platform support>> +** Does the project support our bare-minimum needs? +*** <<tap-support,TAP support>> +*** <<diagnostic-output,Diagnostic output>> +*** <<runtime-skippable-tests,Runtime-skippable tests>> +* Nice-to-have features: +** <<parallel-execution,Parallel execution>> +** <<mock-support,Mock support>> +** <<signal-error-handling,Signal & error-handling>> +* Tie-breaker stats +** <<project-kloc,Project KLOC>> +** <<adoption,Adoption>> + +[[license]] +=== License + +We must be able to legally use the framework in connection with Git. As Git is +licensed only under GPLv2, we must eliminate any LGPLv3, GPLv3, or Apache 2.0 +projects. + +[[vendorable-or-ubiquitous]] +=== Vendorable or ubiquitous + +We want to avoid forcing Git developers to install new tools just to run unit +tests. Any prospective frameworks and harnesses must either be vendorable +(meaning, we can copy their source directly into Git's repository), or so +ubiquitous that it is reasonable to expect that most developers will have the +tools installed already. + +[[maintainable-extensible]] +=== Maintainable / extensible + +It is unlikely that any pre-existing project perfectly fits our needs, so any +project we select will need to be actively maintained and open to accepting +changes. Alternatively, assuming we are vendoring the source into our repo, it +must be simple enough that Git developers can feel comfortable making changes as +needed to our version. + +In the comparison table below, "True" means that the framework seems to have +active developers, that it is simple enough that Git developers can make changes +to it, and that the project seems open to accepting external contributions (or +that it is vendorable). "Partial" means that at least one of the above +conditions holds. + +[[major-platform-support]] +=== Major platform support + +At a bare minimum, unit-testing must work on Linux, MacOS, and Windows. + +In the comparison table below, "True" means that it works on all three major +platforms with no issues. "Partial" means that there may be annoyances on one or +more platforms, but it is still usable in principle. + +[[tap-support]] +=== TAP support + +The https://testanything.org/[Test Anything Protocol] is a text-based interface +that allows tests to communicate with a test harness. It is already used by +Git's integration test suite. Supporting TAP output is a mandatory feature for +any prospective test framework. + +In the comparison table below, "True" means this is natively supported. +"Partial" means TAP output must be generated by post-processing the native +output. + +Frameworks that do not have at least Partial support will not be evaluated +further. + +[[diagnostic-output]] +=== Diagnostic output + +When a test case fails, the framework must generate enough diagnostic output to +help developers find the appropriate test case in source code in order to debug +the failure. + +[[runtime-skippable-tests]] +=== Runtime-skippable tests + +Test authors may wish to skip certain test cases based on runtime circumstances, +so the framework should support this. + +[[parallel-execution]] +=== Parallel execution + +Ideally, we will build up a significant collection of unit test cases, most +likely split across multiple executables. It will be necessary to run these +tests in parallel to enable fast develop-test-debug cycles. + +In the comparison table below, "True" means that individual test cases within a +single test executable can be run in parallel. We assume that executable-level +parallelism can be handled by the test harness. + +[[mock-support]] +=== Mock support + +Unit test authors may wish to test code that interacts with objects that may be +inconvenient to handle in a test (e.g. interacting with a network service). +Mocking allows test authors to provide a fake implementation of these objects +for more convenient tests. + +[[signal-error-handling]] +=== Signal & error handling + +The test framework should fail gracefully when test cases are themselves buggy +or when they are interrupted by signals during runtime. + +[[project-kloc]] +=== Project KLOC + +The size of the project, in thousands of lines of code as measured by +https://dwheeler.com/sloccount/[sloccount] (rounded up to the next multiple of +1,000). As a tie-breaker, we probably prefer a project with fewer LOC. + +[[adoption]] +=== Adoption + +As a tie-breaker, we prefer a more widely-used project. We use the number of +GitHub / GitLab stars to estimate this. + + +=== Comparison + +:true: [lime-background]#True# +:false: [red-background]#False# +:partial: [yellow-background]#Partial# + +:gpl: [lime-background]#GPL v2# +:isc: [lime-background]#ISC# +:mit: [lime-background]#MIT# +:expat: [lime-background]#Expat# +:lgpl: [lime-background]#LGPL v2.1# + +:custom-impl: https://lore.kernel.org/git/c902a166-98ce-afba-93f2-ea6027557176@gmail.com/[Custom Git impl.] +:greatest: https://github.com/silentbicycle/greatest[Greatest] +:criterion: https://github.com/Snaipe/Criterion[Criterion] +:c-tap: https://github.com/rra/c-tap-harness/[C TAP] +:check: https://libcheck.github.io/check/[Check] + +[format="csv",options="header",width="33%",subs="specialcharacters,attributes,quotes,macros"] +|===== +Framework,"<<license,License>>","<<vendorable-or-ubiquitous,Vendorable or ubiquitous>>","<<maintainable-extensible,Maintainable / extensible>>","<<major-platform-support,Major platform support>>","<<tap-support,TAP support>>","<<diagnostic-output,Diagnostic output>>","<<runtime--skippable-tests,Runtime- skippable tests>>","<<parallel-execution,Parallel execution>>","<<mock-support,Mock support>>","<<signal-error-handling,Signal & error handling>>","<<project-kloc,Project KLOC>>","<<adoption,Adoption>>" +{custom-impl},{gpl},{true},{true},{true},{true},{true},{true},{false},{false},{false},1,0 +{greatest},{isc},{true},{partial},{true},{partial},{true},{true},{false},{false},{false},3,1400 +{criterion},{mit},{false},{partial},{true},{true},{true},{true},{true},{false},{true},19,1800 +{c-tap},{expat},{true},{partial},{partial},{true},{false},{true},{false},{false},{false},4,33 +{check},{lgpl},{false},{partial},{true},{true},{true},{false},{false},{false},{true},17,973 +|===== + +=== Additional framework candidates + +Several suggested frameworks have been eliminated from consideration: + +* Incompatible licenses: +** https://github.com/zorgnax/libtap[libtap] (LGPL v3) +** https://cmocka.org/[cmocka] (Apache 2.0) +* Missing source: https://www.kindahl.net/mytap/doc/index.html[MyTap] +* No TAP support: +** https://nemequ.github.io/munit/[µnit] +** https://github.com/google/cmockery[cmockery] +** https://github.com/lpabon/cmockery2[cmockery2] +** https://github.com/ThrowTheSwitch/Unity[Unity] +** https://github.com/siu/minunit[minunit] +** https://cunit.sourceforge.net/[CUnit] + + +== Milestones + +* Add useful tests of library-like code +* Integrate with + https://lore.kernel.org/git/20230502211454.1673000-1-calvinwan@google.com/[stdlib + work] +* Run alongside regular `make test` target
diff --git a/user-manual.html b/user-manual.html index 13915fd..0050db0 100644 --- a/user-manual.html +++ b/user-manual.html
@@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User Manual</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book"><div class="titlepage"><div><div><h1 class="title"><a name="id-1"></a>Git User Manual</h1></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left"></td><td align="left">2023-11-20</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#_introduction">Introduction</a></span></dt><dt><span class="chapter"><a href="#repositories-and-branches">1. Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a Git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability">Understanding history: commits, parents, and reachability</a></span></dt><dt><span class="section"><a href="#history-diagrams">Understanding history: History diagrams</a></span></dt><dt><span class="section"><a href="#what-is-a-branch">Understanding history: What is a branch?</a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="chapter"><a href="#exploring-git-history">2. Exploring Git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch">Counting the number of commits on a branch</a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches">Check whether two branches point at the same history</a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants">Find first tagged version including a given fix</a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch">Showing commits unique to a given branch</a></span></dt><dt><span class="section"><a href="#making-a-release">Creating a changelog and tarball for a software release</a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content">Finding commits referencing a file with given content</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#Developing-With-git">3. Developing with Git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling Git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution">Getting conflict-resolution help during a merge</a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit">Fixing a mistake with a new commit</a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history">Fixing a mistake by rewriting history</a></span></dt><dt><span class="section"><a href="#checkout-of-path">Checking out an old version of a file</a></span></dt><dt><span class="section"><a href="#interrupted-work">Temporarily setting aside work in progress</a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption">Checking the repository for corruption</a></span></dt><dt><span class="section"><a href="#recovering-lost-changes">Recovering lost changes</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#sharing-development">4. Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public Git repositories</a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository">Setting up a public repository</a></span></dt><dt><span class="section"><a href="#exporting-via-git">Exporting a Git repository via the Git protocol</a></span></dt><dt><span class="section"><a href="#exporting-via-http">Exporting a git repository via HTTP</a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository">Pushing changes to a public repository</a></span></dt><dt><span class="section"><a href="#forcing-push">What to do when a push fails</a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository">Setting up a shared repository</a></span></dt><dt><span class="section"><a href="#setting-up-gitweb">Allowing web browsing of a repository</a></span></dt></dl></dd><dt><span class="section"><a href="#how-to-get-a-git-repository-with-minimal-history">How to get a Git repository with minimal history</a></span></dt><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches">Maintaining topic branches for a Linux subsystem maintainer</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#cleaning-up-history">5. Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#interactive-rebase">Using interactive rebases</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="chapter"><a href="#advanced-branch-management">6. Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="chapter"><a href="#git-concepts">7. Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object">Commit Object</a></span></dt><dt><span class="section"><a href="#tree-object">Tree Object</a></span></dt><dt><span class="section"><a href="#blob-object">Blob Object</a></span></dt><dt><span class="section"><a href="#trust">Trust</a></span></dt><dt><span class="section"><a href="#tag-object">Tag Object</a></span></dt><dt><span class="section"><a href="#pack-files">How Git stores objects efficiently: pack files</a></span></dt><dt><span class="section"><a href="#dangling-objects">Dangling objects</a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption">Recovering from repository corruption</a></span></dt></dl></dd><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="chapter"><a href="#submodules">8. Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#pitfalls-with-submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="chapter"><a href="#low-level-operations">9. Low-level Git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index">working directory → index</a></span></dt><dt><span class="section"><a href="#index-to-object-database">index → object database</a></span></dt><dt><span class="section"><a href="#object-database-to-index">object database → index</a></span></dt><dt><span class="section"><a href="#index-to-working-directory">index → working directory</a></span></dt><dt><span class="section"><a href="#tying-it-all-together">Tying it all together</a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="chapter"><a href="#hacking-git">10. Hacking Git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="chapter"><a href="#glossary">11. Git Glossary</a></span></dt><dd><dl><dt><span class="section"><a href="#git-explained">Git explained</a></span></dt></dl></dd><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt><dd><dl><dt><span class="section"><a href="#todo-list">Todo list</a></span></dt></dl></dd></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="_introduction"></a>Introduction</h1></div></div></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User Manual</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book"><div class="titlepage"><div><div><h1 class="title"><a name="id-1"></a>Git User Manual</h1></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left"></td><td align="left">2023-12-09</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#_introduction">Introduction</a></span></dt><dt><span class="chapter"><a href="#repositories-and-branches">1. Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a Git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability">Understanding history: commits, parents, and reachability</a></span></dt><dt><span class="section"><a href="#history-diagrams">Understanding history: History diagrams</a></span></dt><dt><span class="section"><a href="#what-is-a-branch">Understanding history: What is a branch?</a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="chapter"><a href="#exploring-git-history">2. Exploring Git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch">Counting the number of commits on a branch</a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches">Check whether two branches point at the same history</a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants">Find first tagged version including a given fix</a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch">Showing commits unique to a given branch</a></span></dt><dt><span class="section"><a href="#making-a-release">Creating a changelog and tarball for a software release</a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content">Finding commits referencing a file with given content</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#Developing-With-git">3. Developing with Git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling Git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution">Getting conflict-resolution help during a merge</a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit">Fixing a mistake with a new commit</a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history">Fixing a mistake by rewriting history</a></span></dt><dt><span class="section"><a href="#checkout-of-path">Checking out an old version of a file</a></span></dt><dt><span class="section"><a href="#interrupted-work">Temporarily setting aside work in progress</a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption">Checking the repository for corruption</a></span></dt><dt><span class="section"><a href="#recovering-lost-changes">Recovering lost changes</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#sharing-development">4. Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public Git repositories</a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository">Setting up a public repository</a></span></dt><dt><span class="section"><a href="#exporting-via-git">Exporting a Git repository via the Git protocol</a></span></dt><dt><span class="section"><a href="#exporting-via-http">Exporting a git repository via HTTP</a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository">Pushing changes to a public repository</a></span></dt><dt><span class="section"><a href="#forcing-push">What to do when a push fails</a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository">Setting up a shared repository</a></span></dt><dt><span class="section"><a href="#setting-up-gitweb">Allowing web browsing of a repository</a></span></dt></dl></dd><dt><span class="section"><a href="#how-to-get-a-git-repository-with-minimal-history">How to get a Git repository with minimal history</a></span></dt><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches">Maintaining topic branches for a Linux subsystem maintainer</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#cleaning-up-history">5. Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#interactive-rebase">Using interactive rebases</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="chapter"><a href="#advanced-branch-management">6. Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="chapter"><a href="#git-concepts">7. Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object">Commit Object</a></span></dt><dt><span class="section"><a href="#tree-object">Tree Object</a></span></dt><dt><span class="section"><a href="#blob-object">Blob Object</a></span></dt><dt><span class="section"><a href="#trust">Trust</a></span></dt><dt><span class="section"><a href="#tag-object">Tag Object</a></span></dt><dt><span class="section"><a href="#pack-files">How Git stores objects efficiently: pack files</a></span></dt><dt><span class="section"><a href="#dangling-objects">Dangling objects</a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption">Recovering from repository corruption</a></span></dt></dl></dd><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="chapter"><a href="#submodules">8. Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#pitfalls-with-submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="chapter"><a href="#low-level-operations">9. Low-level Git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index">working directory → index</a></span></dt><dt><span class="section"><a href="#index-to-object-database">index → object database</a></span></dt><dt><span class="section"><a href="#object-database-to-index">object database → index</a></span></dt><dt><span class="section"><a href="#index-to-working-directory">index → working directory</a></span></dt><dt><span class="section"><a href="#tying-it-all-together">Tying it all together</a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="chapter"><a href="#hacking-git">10. Hacking Git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="chapter"><a href="#glossary">11. Git Glossary</a></span></dt><dd><dl><dt><span class="section"><a href="#git-explained">Git explained</a></span></dt></dl></dd><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt><dd><dl><dt><span class="section"><a href="#todo-list">Todo list</a></span></dt></dl></dd></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="_introduction"></a>Introduction</h1></div></div></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX command-line skills, but no previous knowledge of Git.</p><p><a class="xref" href="#repositories-and-branches" title="Chapter 1. Repositories and Branches">Chapter 1, <i>Repositories and Branches</i></a> and <a class="xref" href="#exploring-git-history" title="Chapter 2. Exploring Git history">Chapter 2, <i>Exploring Git history</i></a> explain how to fetch and study a project using git—read these chapters to learn how to build and test a particular version of a software project, search for